Javascript对象原型TypeError:...未定义

时间:2013-11-21 10:07:27

标签: javascript jquery prototype jquery-deferred

我在调用原型中的方法时遇到问题,该方法返回:

  

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

知道可能导致它的原因吗?

2 个答案:

答案 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()