Javascript 主干模型是单身吗?
我不是JavaScript专家,所以我可能在这里做错了什么 我有一个简单的Foo主干模型,带有一个默认属性栏,它是一个空数组。我创建了模型的两个实例。我在第一个模型中添加“a”和“b”,在第二个模型中添加“c”和“d”。当我使用console.log()打印条的内容时,两个实例似乎是同一个对象 JsFiddle: 代码: 在控制台中,我看到:Javascript 主干模型是单身吗?,javascript,backbone.js,Javascript,Backbone.js,我不是JavaScript专家,所以我可能在这里做错了什么 我有一个简单的Foo主干模型,带有一个默认属性栏,它是一个空数组。我创建了模型的两个实例。我在第一个模型中添加“a”和“b”,在第二个模型中添加“c”和“d”。当我使用console.log()打印条的内容时,两个实例似乎是同一个对象 JsFiddle: 代码: 在控制台中,我看到: ["a", "b", "c", "d"] ["a", "b", "c", "d"] 我做错了什么?在javascript中,数组(和对象)作为引用传递
["a", "b", "c", "d"]
["a", "b", "c", "d"]
我做错了什么?在javascript中,数组(和对象)作为引用传递
在这里,您为每个模型指定了相同的数组引用
要修复它,每次都需要分配一个新数组
Backbone.Model.extend({
initialize: function() {
this.set("bars", []); // Here we set a new array
}
});
他们不是单身汉
console.log(foo === foo2) //false
发生的情况是,这两个实例共享默认对象,并且它具有对数组的引用。因此,最终该模型的所有实例都具有相同的数组
数组和对象不应在默认对象中声明,而应在构造函数中声明
var Foo = Backbone.Model.extend({
initialize: function () {
this.set("bars", []);
},
defaults: {
bars: null
}
});
数组和对象不应在默认对象中声明,而应在构造函数中声明。实际上,建议使用默认值中的函数返回新数组/对象。你是对的。但不将obj添加到默认值的规则适用于所有JS,而不仅仅适用于主干网。
var Foo = Backbone.Model.extend({
initialize: function () {
this.set("bars", []);
},
defaults: {
bars: null
}
});