【发布时间】:2014-06-15 22:30:51
【问题描述】:
我是 Backbone 的忠实粉丝,但最近在 Backbone 的扩展中遇到了一些奇怪的行为。我之所以称其为奇怪,可能是因为对意图的误解,以及不了解 javascript 工作原理的深层本质。 长话短说,在重新实例化对象时,修改任何实例的属性都会重置为默认值,修改子属性会在所有未来实例中更改它。我希望对此事有任何见解。
这是一些使用 Backbone 扩展的代码:
var myObj = function () {
this.a = true;
};
myObj.extend = extend; //the backbone version, link provided at bottom
//the pattern used throughout backbone
var myExtension = myObj.extend({
b: "hello"
});
var instance1 = new myExtension();
instance1.b = "goodbye";
var instance2 = new myExtension();
console.log(instance2.b); //logs hello!!
var myBadExtension = myObj.extend({
b: {
c: "hello"
}
});
var bad1 = new myBadExtension();
bad1.b.c = "goodbye";
var bad2 = new myBadExtension();
console.log(bad2.b.c); //!!! logs "goodbye" !?!?!?!
非常感谢任何和所有帮助。
【问题讨论】:
-
在我的例子中,它发生在有数组作为模型属性的地方。设置一个,为所有对象设置它然后解决我在设置之前使用了
_.clone。
标签: javascript inheritance backbone.js prototype javascript-objects