> если абстрактная функция, то автоматически делаем 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. вынес =)