属性对象Javascript不是用Jquery Deferred设置的
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
(在严格模式下)。
相关文章:
- JQuery Deferred Ajax,将结果保存在调用对象中
- jQuery Deferred and promise-错误:对象没有't支持属性或方法'然后'
- 强制jQuery Deferred等待Ajax在“”中完成;那么“;处理程序
- 如何用JQuery$.Deferred重写AJAX调用
- jQuery deferred method and ajax beforeSend()
- jQuery Deferred/Promises with many getJSON
- jQuery $.Deferred with window.top.postMessage()
- jQuery deferred:在fail()回调中抛出并捕获异常
- jQuery deferred:用于延迟函数的返回,直到函数内的异步调用完成+获取返回值
- jQuery Deferred和Promise用于同步和异步函数的顺序执行
- Basic jquery deferred usage with ajax
- 角度等价于 jQuery deferred.always() 回调
- 如何使用jQuery Deferred(何时/然后等)来修复末日问题的异步金字塔
- jQuery Deferred只返回循环中的最后一个值
- jQuery.Deferred in recursive cycle
- 处理 jQuery deferred.done 被调用,即使请求被中止
- JQuery Deferred对象和ajax调用
- jQuery Deferred.then - failFilter argument
- jQuery Deferred - catch vs fail
- 对于jquery Deferred函数,有什么替代方法吗