Ссылочный объект, вызывающий функцию в Javascript - PullRequest
0 голосов
/ 25 мая 2010

У меня есть временная система событий в JS, и нападающий выглядит так:

events.attach(events.NEW_TASK,this.update);

Где this.update - обратный вызов / обработчик / функция. Проблема в том, что когда диспетчер пытается вызвать этот обработчик, он теряет свой первоначальный контекст. Как я могу связать обработчик с контекстом объекта, который вызывает функцию присоединения, не передавая this в качестве аргумента и не используя это?

Редактировать: Я должен также упомянуть, что это будет своего рода фреймворк, поэтому он должен быть простым для других разработчиков, поэтому желательно не сохранять контекст в другой переменной.

Ответы [ 3 ]

2 голосов
/ 25 мая 2010

Другой вариант, использующий метод Function.prototype.bind, часть нового ECMAScript Standard :

events.attach(events.NEW_TASK, this.update.bind(this));
1 голос
/ 25 мая 2010

До тех пор, пока ECMAScript 5 не получит широкое распространение в браузерах, вы можете использовать собственную реализацию Function.prototype.bind:

function bind(func, thisObj) {
    return function() {
        func.apply(thisObj, arguments);
    };
}

events.attach(events.NEW_TASK, bind(this.update, this));
0 голосов
/ 25 мая 2010

Вы можете сохранить ссылку "this" в локальной переменной и попробовать вызвать функцию, используя ее

var that = this;

events.attach( events.NEW_TASK, function( ) { that.update(); } );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...