Ember.js 如果余烬对象具有扩展数组属性,为什么不同对象共享同一数组

Ember.js 如果余烬对象具有扩展数组属性,为什么不同对象共享同一数组,ember.js,Ember.js,我只是不明白。 我通过扩展数组属性来定义自己的对象 MyObj = Ember.Object.extend({ id: 0, data: [] }); var obj1 = MyObj.create(); obj1.id = 1; console.log(obj1.data); # will output [] obj1.data.push("a"); var obj2 = MyObj.create(); obj2.id = 2; console.log(obj2.data); #

我只是不明白。 我通过扩展数组属性来定义自己的对象

MyObj = Ember.Object.extend({
  id: 0,
  data: []
});

var obj1 = MyObj.create();
obj1.id = 1;
console.log(obj1.data); # will output []
obj1.data.push("a");

var obj2 = MyObj.create();
obj2.id = 2;
console.log(obj2.data); # will output ["a"]
obj2.data.push("b");

console.log(obj1.data); # will output ["a", "b"]


我认为obj1和obj2是完全独立的对象。只是好奇为什么。

简单的回答是,您正在原型上设置
数据
属性,然后在从类实例化的对象之间共享该属性


我在这篇关于Ember.Object的文章中对此进行了更详细的解释(请参阅初始化部分):

简单的回答是,您正在为原型设置
数据
属性,然后在从类实例化的对象之间共享该属性


我在这篇关于Ember.Object的文章中对此进行了更详细的解释(参见初始化部分):

要解决这个问题,您需要使用
init
钩子来设置
数据属性

下面是一个JSBin示例:


要解决这个问题,您需要使用
init
钩子来设置
数据
属性

下面是一个JSBin示例:

MyObj = Ember.Object.extend({
  id: 0,
  data: null,
  init : function(){
    this.set('data',[]);
  }
});

var obj1 = MyObj.create();
obj1.id = 1;
console.log(obj1.get('data')); // will output []
obj1.get('data').pushObject("a");

var obj2 = MyObj.create();
obj2.id = 2;
console.log(obj2.get('data')); // will output []
obj2.get('data').pushObject("b");

console.log(obj1.get('data')); // will output ["a"]
console.log(obj2.get('data')); // will output ["b"]