“dojo mixin”;“全球”;上下文

“dojo mixin”;“全球”;上下文,dojo,mixins,Dojo,Mixins,如果我有两个类,#1是#2和#1声明属性的混合体(使用默认值-例如:[]来声明一个新的空数组)-为什么会发生这样的情况,类#2的所有实例共享同一个数组实例 我总是必须在构造函数中初始化我的属性吗 错误代码如下所示: dojo.declare("C1", [dojo.Stateful], { _watches:[], constructor:function(){ this._watche

如果我有两个类,#1是#2和#1声明属性的混合体(使用默认值-例如:[]来声明一个新的空数组)-为什么会发生这样的情况,类#2的所有实例共享同一个数组实例

我总是必须在构造函数中初始化我的属性吗

错误代码如下所示:

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();

关于

发生这种情况的原因是,原型上声明的复杂变量被视为“静态”成员变量(因此在所有实例之间共享)。复杂实例变量必须声明为
this.\u在成员函数中监视=[]


请参阅:

发生这种情况的原因是,原型上声明的复杂变量被视为“静态”成员变量(因此在所有实例之间共享)。复杂实例变量必须声明为
this.\u在成员函数中监视=[]

见: