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

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

当我扩展主干模型(ParentModel)时,我使用initialize方法来设置任何默认属性。 但是每当我创build一个基于ParentModel的模型,我使用构造函数来运行任何初始function。 我这样做,因为它的工作原理,但有人在工作中问我为什么使用初始化和构造函数,除了它的工作,我没有一个好的答案。 我可以花时间阅读源代码来弄清楚,但在这里询问并得到正确答案似乎更容易。

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在Backbone设置结构之前运行。 在结构的constructor函数中调用initialize 。 所以基本上如果你需要在Backbone设置结构之前增加任何东西,那么在Backbone设置结构使用initialize之后,如果你需要增加任何东西的话,可以使用constructor initialize

(从Github关于这个问题的讨论 )

constructor函数是Backbone用来设置自己的function – 创build模型,设置事件以及执行各种其他设置。 要非常小心地重写这个,因为如果你通过覆盖或者遮蔽这个方法来防止Backbone代码运行,你会得到很难debugging的奇怪的错误。

另一方面, initialize是骨干一旦完成其内部pipe道就调用其对象的function。 如果你没有做任何专门干扰正常Backbonefunction的事情,只要使用initialize即可。

如果您使用的是CoffeeScript,则使用constructor可能会更直观。 (这是给我的)。 只要确保你总是叫super