骨干模型上的initialize和构造函数有什么区别。
当我扩展骨干模型(ParentModel)时,我使用initialize方法来设置任何默认属性。但是每当我基于ParentModel创建一个Model时,我都会使用构造函数来运行任何初始功能。我这样做是因为它可以工作,但是有人在问我为什么同时使用初始化和构造函数,但除了工作之外,我没有一个好的答案。我可以花一些时间阅读源代码以弄清楚它,但是在这里询问并获得正确的答案似乎要容易得多。
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()调用base一样constructor(),您的覆盖initialize()应该以开头(至少在使用此模式扩展可能已经是扩展模型的情况下)<base>.initialize.apply(this, arguments);,以允许initialize()首先运行任何base-defined 。(这使我在JointJS中陷入了困境,JointJS已经在自己的initialize()某些派生模型中定义了它。)