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"]