var o = {
x: 10,
doIt: function doIt() {
var x = 20;
alert(x);
alert(this.x);
setTimeout(function() {
alert(this.x);
}, 10);
}
};
o.doIt();
第一个弹出20,第二个弹出10都好理解,请问为什么最后一个是undefined。谢谢!
x: 10,
doIt: function doIt() {
var x = 20;
alert(x);
alert(this.x);
setTimeout(function() {
alert(this.x);
}, 10);
}
};
o.doIt();
第一个弹出20,第二个弹出10都好理解,请问为什么最后一个是undefined。谢谢!
var o = {
x: 10,
doIt: function doIt() {
var x = 20;
alert(x);
alert(this.x);
setTimeout(function() {
alert(this.x)//这里的this,以经不是o这个对象了,是顶层的window对象,window对象下没有 x属性,自然弹出undefined了
}, 10);
}
};
o.doIt();
{
var f = this;
return function()
{
f.call(x)
}
}
var o = {
x: 10,
doIt: function doIt() {
var x = 20;
alert(x);
alert(this.x);
setTimeout(function() {
alert(this.x)
}.bind(this), 10);
}
};
o.doIt();
或者这样,改变方法调用的对象
alert(this.x);
}, 10)这里的this代表的是当前的function,可是当前function并没用x这个属性,要想用到你需要如此: setTimeout(function(x) {
alert(x);
}, 10)
x: 10,
doIt: function doIt() {
var x = 20;
setTimeout(function() {
alert(this);
}, 10);
}
};
o.doIt();弹出的是[object window]
alert(this.x)//这里的this,以经不是o这个对象了,是顶层的window对象,window对象下没有 x属性,自然弹出undefined了
}, 10);
那这里为什么是window调用它呢?function(){}是个匿名函数,感觉没人调用它?
function a() { alert(this) }
a();
定义一个函数,alert(this)的结果就是[object window]