Javascript 主干模型是单身吗?

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中,数组(和对象)作为引用传递

我不是JavaScript专家,所以我可能在这里做错了什么

我有一个简单的Foo主干模型,带有一个默认属性栏,它是一个空数组。我创建了模型的两个实例。我在第一个模型中添加“a”和“b”,在第二个模型中添加“c”和“d”。当我使用console.log()打印条的内容时,两个实例似乎是同一个对象

JsFiddle:

代码:

在控制台中,我看到:

["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
    }
});