this的基本用法和改变this指向问题

1:全局中的this
this->window.例如
this的基本用法和改变this指向问题
2:在全局作用域中声明一个变量,等同于在window上添加一个属性

  1. var obj={}; console.log(this.obj); //{}
    this->.obj通过this指向获取window上挂载的属性 console.log(window.obj==obj)
    //true

3:函数中的this只和函数的调用方式有关,和声明方式无关

1:函数如果直接调用,函数中的this指向window

 .例如:var name='zhangsan';   
           function fn(){
           var name='lisi'
           console.log(this.name)} 
            fn() //输出结果是zhangsan

2:如果函数被一个对象调用,那么this指向该对象

  1. var name=‘zhangsan’;
    var obj={
    name:‘lisi’,
    fn:function(){
    name=‘wangwu’
    console.log(this.name) }
    }
    obj.fn() //李四
    var name=‘张三’;
    function getname(){
    console.log(this.name) }
    var obj={
    name:‘李四’,
    fn:function(){
    console.log(this.name)
    },
    lastfn:{
    name:’‘王五’’,
    fn:getname
    } }
    var getAge=obj.fn;
    getname() //函数直接调用,this指向window,所以输出’张三’
    obj.fn()//函数是被obj对象调用,this指向obj,所以输出’李四’
    obj.lastfn.fn() //
    当前函数调用的是obj.lastfn,this指向obj.lastfn,所以输出结果是’王五’
    getAge()//函数是直接调用的,this指向window,内部函数如果有this都是指向window,所以输出’张三’.

4:this的特殊情况

. 1:事件处理程序中,this指向当前绑定的dom对象.

  1. .<div id=“click”">
    click.onclick=function(){ //click.onclick()click.onclick=function(){ //click.onclick()
    console.log(this) //输出节点div
    }

    click.addEventListener(‘click’,function(){ console.log(this) //当中的function也是事件处理程序,所以当中的this也指向当前绑定的dom元素 },false)

2:定时器,延时器;this->window;

  1. setInterval(function(){
    console.log(this)//相当于把函数传递进来后直接执行了,所以this->window },1000),

5: 如何改变this的指向.
1:call(x,…)

  1. 第一个参数x为this的指向,后续参数为选填,为函数传入的实参.
    var name=‘张三’;
    var obj={
    name:‘李四’
    };
    function fn(a,b){
    console.log(this.name);
    console.log(a+b);

};

fn(); //输出张三
fn.call(obj); //输出’李四’,NaN fn.call(obj); //输出’李四’,NaN
fn.call(obj,10,10) //输出’李四’,20

2:apply(x,y)

  1. 第一个参数x为this的指向,y为传入参数的集合,用法和call一样,唯一的区别是call传入实参是一个一个传递,而apply传入的实参是一个集合.
  2. var name=‘张三’;
    var obj={
    name:‘李四’
    };
    function fn(a,b){
    console.log(this.name);
    console.log(a+b);

};
fn(); //输出张三
fn.apply(obj); //输出’李四’,NaN
fn.apply(obj,[10,10]) //输出’李四’,20

this的基本用法和改变this指向问题
3:bind(a,b)
和call用法一样,不会执行函数,会返回一个改变this以后的函数
this的基本用法和改变this指向问题