繁体   English   中英

未使用Jquery Deferred设置属性对象Javascript

[英]Property Object Javascript is not set with Jquery Deferred

我有以下代码:

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是空的? 为什么会这样?

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 (在严格模式下)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM