2016-09-27 56 views
0

我对某些项目使用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,等等。

我不明白为什么会发生这种情况。感谢任何帮助。

回答

3

这是已被扩展的prototype。这些功能在使用new创建实例时可用。所以做一个console.log(api.dom.email.prototype);或创建一个新的实例new

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

太棒了!为什么我不能给你+50?非常感谢 –

+1

我不知道,但它会很好! ;)不客气,@JeremyBelolo – eisbehr