骨干模型上的initialize和constructor之间有什么区别

时间:2012-04-12 07:07:16

标签: javascript backbone.js

骨干模型上的initialize和constructor之间有什么区别。

当我扩展骨干模型(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
   },

2 个答案:

答案 0 :(得分:88)

constructor在Backbone设置结构之前运行。在结构的initialize函数内部调用constructor。所以基本上如果你需要在Backbone设置结构之前增加任何东西,如果你需要在Backbone设置结构后使用constructor,请使用initialize

(来自Github discussion on the subject

答案 1 :(得分:30)

constructor是Backbone用于设置自身的功能 - 创建模型,设置事件以及执行各种其他设置。在覆盖这个时要非常小心,因为如果你通过覆盖或遮蔽方法来防止Backbone代码运行,你将会得到难以调试的奇怪错误。

另一方面,

initialize是Backbone一旦完成内部管道就调用其对象的函数。如果您没有做任何专门用于干扰正常Backbone功能的事情,请使用initialize。

如果您使用的是CoffeeScript,使用constructor可能会更直观。 (这是给我的)。但请确保您始终致电super