如果我有两个类,#1是#2和#1的混合声明属性(使用默认值 - 例如:[]来声明一个新的空数组) - 为什么会发生,所有实例都是class#2共享SAME数组实例?
我总是必须在构造函数中初始化我的属性吗?
错误代码如下:
dojo.declare("C1",
[dojo.Stateful],
{
_watches:[],
constructor:function(){
this._watches.push("test");
}
...
}
);
dojo.declare("C2",
[dijit.MenuBarItem,C1],
{
constructor:function(){
console.debug(this._watches.length);
}
}
);
new C2();
new C2();
new C2();
new C2();
问候
答案 0 :(得分:1)
发生这种情况的原因是因为在原型上声明的复杂变量被视为“静态”成员变量(因此在所有实例之间共享)。复杂的实例变量必须在成员函数中声明为this._watches = []
。
请参阅:http://www.enterprisedojo.com/2011/05/17/dojo-beginner-gotcha-accidental-static-fields/