在函数执行时,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 绑定:指向绑定的对象
见上个博客内容。