jQuery - $ .extend没有返回预期的函数

时间:2016-09-27 11:08:44

标签: javascript jquery

我正在使用gmail.js进行某些项目。在库中,有一个这样的函数:

api.dom.compose = function(element) {
    // stuff
}

api.dom.email = function(element) {
    this.id = element;
    var message_class_id = 'm' + this.id;
    this.id_element = $('div.ii.gt div.a3s.aXjCH.' + message_class_id);
    element = this.id_element.closest('div.adn');

    this.$el = element;
    return this;
};

$.extend(api.dom.email.prototype, {
    body: function(body) {
        var el = this.dom('body');
        if (body) {
            el.html(body);
        }
        return el.html();
    },

    from: function(email, name) {
        var el = this.dom('from');
        if (email) {
            el.attr('email',email);
        }
        if (name) {
            el.attr('name',name);
            el.html(name);
        }
        return {
            email: el.attr('email'),
            name: el.attr('name'),
            el: el
        };
    },

    // more extended functions

});

// more functions on the api.dom object

return api;

在我的代码中,我正在使用它:

var email = provider.dom.email(mId);
console.log(email);

console.log真是令人惊讶。我期待看到$.extend部分的功能。在那个地方,显示的功能是在api.dom对象上注册的功能! email()本身,compose等等。

我根本不明白为什么会这样。提前感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

已扩展prototype。使用new创建实例时,这些功能可用。这样做console.log(api.dom.email.prototype);或使用new创建新实例。

var email = new provider.dom.email(mId);
console.log(email);