Показать сообщение отдельно
  #1 (permalink)  
Старый 13.07.2014, 22:16
Новичок на форуме
Отправить личное сообщение для Novascriptum Посмотреть профиль Найти все сообщения от Novascriptum
 
Регистрация: 13.07.2014
Сообщений: 2

Правильная перегрузка метода-обработчика события
Всем доброго времени!
Пусть имеется некая абстрактная функция-конструктор:

function AbstractObj(){
    var me = this;
    this.param = 'some param';
    this.a = function(e){
        console.log(me);
    }
    this.b = function(){
        $('some element').click(this.a);  //Здесь может быть любой код, который ставит какому-то событию обработчик "this.a"
    }
}


Теперь есть некий кусок кода, который создает объект и пытается переопределить метод-обработчик:
var com = new AbstractObj();
com.a = function(e){
    console.log('Overrided:');
    console.log(me);
}
com.b();

В результате при возникновении нашего события, описанного в методе b, получим сообщение об ошибке: "Uncaught ReferenceError: me is not defined".
Значит, новая функция "a" не имеет доступа к внутренним переменным AbstractObj. Попробовал замыкания. Добавим в AbstractObj метод для перегрузки:

function AbstractObj(){
    //Все то же самое плюс новая функция
    this.Override = function(key, value){
        this[key] = (function(){
            return value;
        })();
    }
}


Используем:
var com = new AbstractObj();
com.Override('a', function(e){
    console.log('Overrided:');
    console.log(me);
});
com.b();


В результате получаем ту же ошибку. Вопрос: как сделать, чтобы из нового метода был доступ к переменным вроде "me"?
Ответить с цитированием