【发布时间】:2012-04-24 12:40:47
【问题描述】:
骨干模型上的初始化和构造函数有什么区别。
当我扩展主干模型 (ParentModel) 时,我使用初始化方法来设置任何默认属性。但是每当我基于 ParentModel 创建一个模型时,我都会使用构造函数来运行任何初始功能。我这样做是因为它有效,但工作中有人问我为什么同时使用初始化和构造函数,除了它有效之外我没有一个好的答案。我可以花时间阅读源代码来弄清楚它,但在这里提问并得到正确答案似乎要容易得多。
var ParentModel = Backbone.Model.extend({
initialize : function() {
// code here
},
});
var Model = ParentModel.extend({
constructor : function (options) {
Backbone.Model.prototype.constructor.call(this, options);
// code here
},
【问题讨论】:
-
请注意,正如您的
constructor()调用基础constructor()一样,您应该开始覆盖initialize()(至少在您使用此模式来扩展可能已经存在的内容的情况下)是一个扩展模型)与<base>.initialize.apply(this, arguments);,以允许任何基本定义的initialize()首先运行。 (这在 JointJS 中引起了我的注意,它已经在某些自己的派生模型上定义了自己的initialize()。)