JavaScript 的this对象

来源:互联网 发布:苏轼 柳永 知乎 编辑:程序博客网 时间:2024/05/21 10:37

在函数执行时,this总是指向调用该函数的对象。

  • 有对象就指向调用对象
  • 没调用对象就指向全局对象
  • 用new构造就指向新对象
  • 通过apply或call或bind来改变this的指向。

    1:函数有所属对象时

 var obj ={      value : 100  }  obj.getValue = function(){        console.log(this.value);//100        console.log(this);        //输出:{ value: 100, getValue: [Function] }        return this.value;    }console.log(obj.getValue());//100

2:函数没有所属对象:指向全局对象

var obj ={      value:100  }  obj.getValue = function(){        var foo = function(){            console.log(this.value);//undefined,因foo函数调用时没有所属对象            console.log(this);//输出window全局对象        }        foo();        return this.value;//这句代码中的this指向obj    }console.log(obj.getValue());//100

在上述代码块中,foo 函数虽然定义在 getValue 的函数体内,但实际上它既不属于 getValue 也不属于 obj。foo 并没有被绑定在任何对象上,所以当调用时,它的 this 指针指向了全局对象 global.
3:构造器中的this:指向新对象
在JavaScript中,通过new关键词来调用构造函数,此时this会绑定到该新对象上。
var ConstructObj = function(){
this.value = 100;
}
var newConObj = new ConstructObj();
console.log(newConObj.value); //100
4: apply 和 call 调用以及 bind 绑定:指向绑定的对象
见上个博客内容。