1.在一般函数方法中使用 this 指代全局对象
function test(){
this.x = 1; //这里this就是window
console.log(this.x);
}
test(); // 1
2.作为对象方法调用,this 指代上级对象
var x =3;
function test(){
alert(this.x);
}
var o = {
x:1,
m:test
};
o.m(); // 1
3.作为构造函数调用,this 指代new 出的对象
function test(){
console.log(this);
}
var o = new test();
test();
//可以看出o代表的不是全局对象
面试题:
var name = 'global';
var obj = {
name : 'obj',
dose : function(){
this.name = 'dose';
return function(){
return this.name;
}
}
}
console(obj.dose().call(this))
console.log(obj.name);
个人理解:首先obj.dose()调用了obj的dose方法,因为是obj调用的,那么call的this指向就是obj,this.name="dose"就是把obj.name修改为dose,后面是return function,由于不是箭头函数,它属于内部匿名函数,那么这里面的this就是windows了。