我在调用原型中的方法时遇到问题,该方法返回:
TypeError:this.backgroundImagesReplace(...)未定义
this.backgroundImagesReplace(数据)
我的代码如下所示:
var Template = function() {};
Template.prototype = {
backgroundImagesReplace : function(data) {
var defer = $.Deferred();
// some code that resolves the deferred object
defer.resolve(data);
},
replace : function(data, callback) {
this.backgroundImagesReplace(data)
.done(this.replaceContent)
.done(this.replaceElement)
.done(this.replaceAttribute)
.done(systemObject.executeCallBack(callback));
},
init : function() {
this.replace([], function() {
console.log('here');
});
}
};
var TemplateObject = new Template();
TemplateObject.init();
知道可能导致它的原因吗?
答案 0 :(得分:3)
您忘记在backgroundImagesReplace
功能中返回该对象。虽然您可以直接返回Deferred
对象,但建议返回Promise
对象,因为它更适合传递给其他对象/函数。 Deferred
个对象应保持私有状态,因为它们的状态可以直接更改,而通过Promise
对象意外更改状态要困难得多。您可以通过执行以下操作来执行此操作:
backgroundImagesReplace : function(data) {
var defer = $.Deferred();
// some code that resolves the deferred object
defer.resolve(data);
return defer.promise();
},
这会为您提供TypeError
,因为您的代码正在尝试访问undefined
的属性,这当然不会达到您预期的效果。
答案 1 :(得分:0)
您的方法backgroundImagesReplace不会返回任何内容。因此调用它的结果是未定义的,您试图在其上调用.done()
。