摘自郑高强《cocos2d-js开发之旅》。
this会随着函数使用的场合不同而代表不同的值,原则是指向调用这个函数的对象。
情况一:全局函数。
var x = 1;
function test(){
console.log(this.x);
}
test();//1
var x = 1;
function test(){
this.x = 0;
}
test();
console.log(x);//0
情况二:某个对象的方法。
function test(){
console.log(this.x);
}
var o = {};
o.x = 1;
o.m = test;
o.m();//1
情况三:作为构造函数。
使用new关键字,再调用function会生成一个新的对象,而this则指向这个对象。
function test(){
this.x = 1;
}
var o = new test();
console.log(o.x);//1
情况四:apply/call调用
这种情况下,this将指向apply/call的第一个参数target。
function test(){
console.log(this.x);
}
var o = {};
o.x = 1;
o.m = test;
var o2 = {};
o2.x = 2;
o.m.apply(o2);//2
o.m.call(o2);//2