Правильно упакованные функции в JavaScript - PullRequest
0 голосов
/ 04 января 2012

У меня следующая проблема:

У меня есть функция

workspace.func = function() {console.log(5);}

Я присоединяю ее как обработчик событий:

$(workspace).bind("ping", workspace.func);

Затем я меняюопределение функции:

var cF = workspace.func;
workspace.func = function() {
   ...
   cf.call(this);
}

но

$(workspace).trigger("ping")
>>5

Как правильно обернуть функцию во время выполнения, чтобы обработчик также указывал на измененную функцию?

1 Ответ

2 голосов
/ 04 января 2012

Вы можете сделать это так:

workspace.func = function() {console.log(5);}
$(workspace).bind("ping", function() {workspace.func()});

var cF = workspace.func;
workspace.func = function() {
   ...
   cf.call(this);
}

После переназначения значения workspace.func обработчик события ping перейдет к новой функции, потому что он получает указатель на функцию из переменной, а затем выполняет его, поэтому, если вы измените, на какую функцию указывает эта переменная, он получит новое значение - в отличие от вашей исходной версии, в которой была ссылка на фактическую функцию, поэтому изменение переменной workspace.func ничего не дало.

...