dojo mixin глобальный контекст

если у меня есть два класса, # 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();

С Уважением


person Gerhard Presser    schedule 04.08.2011    source источник


Ответы (1)


Это происходит потому, что сложные переменные, объявленные в прототипе, обрабатываются как «статические» переменные-члены (и, следовательно, являются общими для всех экземпляров). Сложные переменные экземпляра должны быть объявлены как this._watches = [] внутри функции-члена.

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

person Frode    schedule 04.08.2011