ale*_*exb 5 javascript backbone.js
我花了很多时间试图捕捉我的应用程序中的错误.最后我把这段代码分开了,这对我来说似乎很奇怪.
var Model = Backbone.Model.extend({
myProperty: []
});
var one = new Model();
var two = new Model();
one.myProperty.push(1);
console.log(two.myProperty); //1!!
Run Code Online (Sandbox Code Playgroud)
它背后的原因是什么?为什么会这样呢?如何在代码中避免这种类型的错误?
JavaScript 中的继承是典型的——对象可以直接引用原型链中更高层的属性。
在您的示例中,one和two两者共享一个共同的原型,并且不提供自己的值,myProperty因此它们都直接引用Model.protoype.myProperty.
您应该为实例化的每个模型创建新myProperty数组。Model.initialize是这种初始化的惯用位置 - 覆盖 constructor 不必要地复杂。
var Model = Backbone.Model.extend({
initialize: function() {
this.myProperty = [];
}
});
Run Code Online (Sandbox Code Playgroud)
或者,您可以将myProperty其作为模型的属性:
var Model = Backbone.Model.extend({
defaults: function() {
return {
myProperty: []
}
}
});
Run Code Online (Sandbox Code Playgroud)
重要的是要注意这defaults是一个函数 - 如果您要使用一个简单的对象,您将遇到相同的共享引用问题。
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |