додзё миксин "глобальный" контекст - PullRequest
1 голос
/ 04 августа 2011

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

regards

1 Ответ

1 голос
/ 04 августа 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...