我有以下代码:
function cBase() {
}
function Setting() {
this.myvar='';
}
Setting.prototype = new cBase();
Setting.prototype.setVal=function() {
var deferred=$.Deferred();
setTimeout(function(){
this.myvar='my value';
console.log('value '+this.myvar);
deferred.resolve();
},2000);
return deferred.promise();
};
var oset=new Setting();
oset.setVal().done(function(){
console.log('all done '+oset.myvar);
});
以前使用值myvar
设置了属性"my value"
,但是当我使用对象oset
并调用方法setVal()
时,属性myvar
是空的?为什么会这样?
答案 0 :(得分:0)
this
的值不会是setTimeout()
回调中的对象。您需要使用.bind()
来确保this
符合您的要求,或者使用另一个变量来保存它。
Setting.prototype.setVal=function() {
var deferred=$.Deferred();
var self = this;
setTimeout(function(){
self.myvar='my value';
console.log('value '+self.myvar);
deferred.resolve();
},2000);
return deferred.promise();
};
请记住,this
由函数的调用者决定。对于正常函数调用,它是setTimeout()
在调用其回调函数时所执行的操作,this
设置为全局对象(在常规模式下)或undefined
(在严格模式下)。