【问题标题】:dojo mixin "global" contextdojo mixin“全局”上下文
【发布时间】:2011-08-04 10:06:41
【问题描述】:

如果我有两个类,#1 是 #2 的混合,#1 声明属性(使用默认值 - 例如:[] 声明一个新的空数组) - 为什么会发生,所有实例class#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();

问候

【问题讨论】:

    标签: dojo mixins


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-29
      • 1970-01-01
      • 2021-08-18
      • 2014-01-08
      • 2019-03-08
      • 2021-12-21
      • 1970-01-01
      相关资源
      最近更新 更多