2013-11-21 111 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()

相關問題