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

What's the difference between initialize and constructor on a backbone model

本文关键字:构造函数 什么 区别 初始化 模型      更新时间:2023-09-26

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

当我扩展主干模型(父模型)时,我使用 initialize 方法来设置任何默认属性。但是,每当我基于 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

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

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

constructor是Backbone用来设置自己的函数 - 创建模型,设置事件以及执行各种其他设置。重写时要非常小心,因为如果通过重写或隐藏方法来阻止 Backbone 代码运行,则会遇到难以调试的奇怪错误。

另一方面,initialize是 Backbone 在完成内部管道后调用其对象的函数。如果您没有执行任何专门用于干扰正常主干功能的操作,只需使用初始化即可。

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