Показать сообщение отдельно
  #6 (permalink)  
Старый 12.07.2008, 14:02
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

> если абстрактная функция, то автоматически делаем apply как было раньше

Вы ж с этого начали - вам надо detach'ить хэндлеры; но если будет передана анонимная функция при атаче, то нельзя будет сделать detachEvent и removeEventListener (прочитайте мой первый пункт выше). Передавая каждый раз анонимную функцию - вы каждый раз содаете новую функцию. И то, что вы внутри сделаете var handler = ... - это тоже не спасет, т.к. опять не известно, что передавать при detach'e (если только handler у вас не глобальная функция будет, но это уже не правильно).

Поэтому привязывать к this надо снаружи и передавать уже привязанную функцию - одну и ту же - и при атаче и при детаче.

P.S.:

> а как проверить тип функции? %)

"тип функции" тут не совсем подходит - вам же прсто надо узнать есть имя у функции или нет; в FF можно проверить свойство name. Но сработает это только для функции типа declaration:

function a() {};
alert(a.name);


но уже не сработает для типа statement:

var a = function () {}; // один из разновидностей statement'а функции
alert(a.name);


Поэтому кроссбраузерно, можно привести функцю toString'ом и найти имя (или пустоту в случае анонимной функции и некоторых statement'ов).

Но все это не нужно для вашего таска, поэтому в P.S. вынес =)
__________________
Тонкости ECMAScript
Ответить с цитированием