道歉,如果这个问题看起来很愚蠢,但我对JS来说相对较新。
我有一个继承Animal的类Dog。 Animal有一个数组属性。 在代码中我创建了一个新的Dog并向数组中添加了东西。 问题是Dog的每个新实例似乎都共享该数组。
Animal.js:
define([
"dojo/_base/declare",
"evo/common/model/_Model"
], function(declare, _Model ) {
return declare([_Model], {
_id: 0,
_items: [],
_filter: null,
...
});
});

Dog.js:
define([
"dojo/_base/declare",
"evo/common/model/_ModelList"
], function (declare, _ModelList) {
return declare([_ModelList], {
...
});
});

我在创建新狗时修复了重置_items,但我怀疑如果我有多个Dog实例,这会影响所有。 如何使属性非静态?
答案 0 :(得分:3)
创建dojo类时,如果它包含数组或其他对象,则应在constructor()
中声明它们,这样每个实例都会按预期获得自己的副本。
请注意,在JS简单类型中,如字符串,数字,布尔值,null都是按值分配的,并且可以在dojo类中声明。
相反,对象是通过引用分配的,包括数组(在JS中被视为“特殊”对象)。
示例:
https://jsfiddle.net/ua3gytbu/
require(["dojo/_base/declare"], function(declare) {
var Animal = declare(null, {
constructor: function() {}
});
var Dog = declare(Animal, {
constructor: function() {
this.items = [];
}
});
var dog = new Dog();
dog.items.push(1);
dog.items.push(2);
var dog2 = new Dog();
dog2.items.push(3);
alert('dog has in items ' + dog.items.length);
alert('dog2 has in items ' + dog2.items.length);
});