Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема со статичными полями класса в mootools 
V
    Опции темы
AztEK
Дата 31.10.2008, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 723
Регистрация: 4.1.2005

Репутация: нет
Всего: 18



Добрый день. Работая с реализацией ООП в mootools, столкнулся со следующей проблемой.
Код

var Test = new Class({
    things: [],
    initialize: function(a) {
        this.things.push(a);
    },

    add: function(a) {
        this.things.push(a);
    }
});


var a = new Test(1);
a.add(2);
            
var b = new Test(3);
b.add(4);
            
a.things.each(function(t) {
    alert(t);
});


Ожидается, что скрипт выведет 1 и 2. На деле же выводится 1, 2, 3, 4. Похоже, что поле этого псевдо-класса работает как статическое.
Подскажите, как можно избежать такого поведения. Спасибо.


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
AztEK
Дата 5.12.2008, 02:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 723
Регистрация: 4.1.2005

Репутация: нет
Всего: 18



А решение-то оказалось элементарным.
Предыдущий код надо было переписать вот так:
Код

var Test = new Class({
    initialize: function(a) {
        this.things = [];
        this.things.push(a);
    },
    add: function(a) {
        this.things.push(a);
    }
});

Всем столкнувшимся с подобной проблемой, рекомендую почитать о механизме замыканий в JavaScript, многи вещи сразу проясняются.


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Применение библиотек | Следующая тема »


 




[ Время генерации скрипта: 0.0543 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.