67

骨干模型上的初始化和构造函数有什么区别。

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

2 回答 2

90

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

(来自关于该主题的 Github 讨论

于 2012-04-12T07:32:15.457 回答
32

constructor是 Backbone 用来设置自己的功能 - 创建模型、设置事件和进行各种其他设置。覆盖它时要非常小心,因为如果你通过覆盖或隐藏方法来阻止 Backbone 代码运行,你会得到难以调试的奇怪错误。

initialize另一方面,Backbone 在完成其内部管道后调用其对象的函数。如果您没有做任何专门干扰正常 Backbone 功能的事情,只需使用初始化。

如果您使用的是 CoffeeScript,使用constructor. (这是给我的)。不过,只要确保你总是打电话super

于 2012-04-12T11:22:41.443 回答