javascript - 扩展主干模型或 View 时,我如何创建在实例而不是原型(prototype)上创建的属性?

标签 javascript backbone.js

我想做的事:

var MyModel = Backbone.model.extend({
  someProp: { ... },
  .
  .
  });

但是有 new MyModel().someProp === new MyModel().someProp 返回 false

好像我已经完成了

function MyModel() {
 this.someProp = {...};
}

我不想将赋值 this.someProp = {...}; 放在 initialize 方法中,因为如果我继承 MyModel,我将不得不重复也可以在子类的初始化方法中再次赋值,或者记得每次我子类化时调用父类初始化从子类初始化,这在我看来是一种解决方法而不是解决方案。那么,还有没有别的办法呢?

最佳答案

如果您想将它用于多个模型,那么一种解决方案是创建一个独立的函数来处理它,然后您可以从模型的初始化方法中调用该函数。

举个例子

function addInstanceProperties() {
  this.someProp = 'hello';
  this.otherProp = 'world';
}

var Parent = Backbone.Model.extend({
  initialize: function() {
    //have to use 'call' so the context is set to this model
    addInstanceProperties.call(this); 
  }
});

var Child = Parent.extend({
  initialize: function() {
    addInstanceProperties.call(this);
  }
});

但是,这与在父级中分配属性并让子级调用父级的初始化方法没有任何不同。而且涉及的代码更少。

var Parent = Backbone.Model.extend({
  initialize: function() {
    this.someProp = 'hello';
    this.otherProp = 'world';
  }
});

var Child = Parent.extend({
  initialize: function() {
    Parent.prototype.initialize.call(this);
  }
});

除非您想在每个初始化方法中重复属性分配,否则这实际上是在 Javascript 中唯一的其他方法。

关于javascript - 扩展主干模型或 View 时,我如何创建在实例而不是原型(prototype)上创建的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8943909/

相关文章:

javascript - 为前端应用程序保存用户数据

api - react_with 在 rails 4.2 中的替代方案用于主干

javascript - 防止添加类同时防止点击

javascript - 使用 REST API(JSON、XML、HTML...)在请求之间传递消息

javascript - 如何在 JavaScript 的异步 Promise 中使用同步?

javascript - 如何读取父域 cookie

javascript - 忽略数组中的公共(public)记录并设置数组不匹配记录的属性

javascript - 如何使用 Backbone.validation 添加我自己的验证器?

javascript - 在下划线模板中使用函数

jquery - 如何告诉 dataTables 检查 Backbone 集合中的更新数据?