道场混合“全球”背景

时间:2011-08-04 10:06:42

标签: dojo mixins

如果我有两个类,#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();

问候

1 个答案:

答案 0 :(得分:1)

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

请参阅:http://www.enterprisedojo.com/2011/05/17/dojo-beginner-gotcha-accidental-static-fields/