Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 一个实例中的主干模型更改数据会影响另一个实例_Backbone.js_Pass By Reference_Javascript_Backbone Model - Fatal编程技术网

Backbone.js 一个实例中的主干模型更改数据会影响另一个实例

Backbone.js 一个实例中的主干模型更改数据会影响另一个实例,backbone.js,pass-by-reference,javascript,backbone-model,Backbone.js,Pass By Reference,Javascript,Backbone Model,我只是在使用Backbone.Model时遇到了一个奇怪的错误 因此,我的模型声明类似于: var MyMode = Backbone.Model.extend({ defaults:{ 'someList': [] }, initialize: function(){ _.bindAll(this, 'toString', 'castFromString'); }, toString: function(){ return

我只是在使用Backbone.Model时遇到了一个奇怪的错误

因此,我的模型声明类似于:

var MyMode = Backbone.Model.extend({
   defaults:{
      'someList': []
   },

   initialize: function(){
      _.bindAll(this, 'toString', 'castFromString');
   },

   toString: function(){
      return this.get('hierarchyNameList').join('+');
   },

   castFromString: function(str){
      var strArray = [], index = 0;
      if (str) {
         strArray = str.split('+');
      }
      for (index = 0; index < strArray.length; index++){
         this.get('hierarchyNameList').push(strArray[index]);
      }
   }
});

实际的代码比这更复杂,但我想这就是我可能做错的地方,有没有关于为什么会发生这种情况的建议?提前谢谢

问题在于您的默认设置

defaults:{
  'someList': []
},
JavaScript中的对象是通过引用而不是通过值传递的。这意味着您没有明确指定
someList
值的所有实例都将共享在上面的
defaults
定义中创建的数组。要避免这种情况,您可以将默认值定义为函数:

defaults: function () {
    return { 'someList': [] };
},

这将为
MyModel
的每个实例创建新数组,因此它们不会共享同一个数组。

问题在于您的默认设置

defaults:{
  'someList': []
},
JavaScript中的对象是通过引用而不是通过值传递的。这意味着您没有明确指定
someList
值的所有实例都将共享在上面的
defaults
定义中创建的数组。要避免这种情况,您可以将默认值定义为函数:

defaults: function () {
    return { 'someList': [] };
},

这将为
MyModel
的每个实例创建新数组,因此它们不会共享同一个数组。

问题在于您的默认设置

defaults:{
  'someList': []
},
JavaScript中的对象是通过引用而不是通过值传递的。这意味着您没有明确指定
someList
值的所有实例都将共享在上面的
defaults
定义中创建的数组。要避免这种情况,您可以将默认值定义为函数:

defaults: function () {
    return { 'someList': [] };
},

这将为
MyModel
的每个实例创建新数组,因此它们不会共享同一个数组。

问题在于您的默认设置

defaults:{
  'someList': []
},
JavaScript中的对象是通过引用而不是通过值传递的。这意味着您没有明确指定
someList
值的所有实例都将共享在上面的
defaults
定义中创建的数组。要避免这种情况,您可以将默认值定义为函数:

defaults: function () {
    return { 'someList': [] };
},

这将为
MyModel
的每个实例创建新的数组,因此它们不会共享同一个数组。

非常感谢!我真的不知道默认值在主干模型中是如何工作的,如果您不确定主干源代码是如何工作的(尽管我不确定这是否有助于解决这个问题),那么深入研究主干源代码是值得的。它的文档记录得非常好,很容易理解。非常感谢!我真的不知道默认值在主干模型中是如何工作的,如果您不确定主干源代码是如何工作的(尽管我不确定这是否有助于解决这个问题),那么深入研究主干源代码是值得的。它的文档记录得非常好,很容易理解。非常感谢!我真的不知道默认值在主干模型中是如何工作的,如果您不确定主干源代码是如何工作的(尽管我不确定这是否有助于解决这个问题),那么深入研究主干源代码是值得的。它的文档记录得非常好,很容易理解。非常感谢!我真的不知道默认值在主干模型中是如何工作的,如果您不确定主干源代码是如何工作的(尽管我不确定这是否有助于解决这个问题),那么深入研究主干源代码是值得的。它的文档记录得非常好,很容易理解。