Показать сообщение отдельно
  #11 (permalink)  
Старый 13.07.2008, 02:08
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Да нет, я не считаю это цеплянием к словам :-) спасибо, что поправили, теперь вижу разницу между абстрактной и анонимной функциями.

Отделил функции созданные при помощи declaration и statement от анонимных регулярным выражением:
obj.attachEvent('on' + type, listener.toString().search(/^function\s*\(/) + 1 ? listener.bind(obj) : listener);

для этого в прототипе bind возвращаем не анонимную функцию
Function.prototype.bind = function(object) {
  var __method = this;
  return function __fn() {
    return __method.apply(object, arguments);
}

в итоге получается, что если в метод объекта bind передаем анонимную функцию, то выполняется автоматическая обертка, чтобы по ссылке this был доступен этот объект, иначе, если хотим использовать detachEvent передаем в метод объекта bind имя функции или переменную, содержащую функцию, если хотим еще использовать и detachEvent и this, то перед передачей в метод bind, выполняем еще var handler = fn.bind(obj);
Страсти короче, но работает %)
Как то в jQuery это все автоматически делается

Последний раз редактировалось Octane, 13.07.2008 в 03:08.
Ответить с цитированием