2013-11-21 79 views
0

我有打电话的原型方法,它返回一个问题:JavaScript对象原型类型错误:...是不确定的

TypeError: this.backgroundImagesReplace(...) is undefined

this.backgroundImagesReplace(data)

我的代码如下所示:

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(); 

任何想法可能会导致它?

回答

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,其中(当然)不会做你希望它做的一个属性。

+0

你需要返回'defer.promise()' –

+0

感谢澳航 - 就是这样! –

+0

@ArunPJohny:true - 当直接返回“Deferred”对象“起作用”时,返回一个'Promise'可能更好。 –

0

您的方法backgroundImagesReplace不会返回任何内容。因此调用它的结果是未定义的,您试图在其上调用.done()

相关问题