Да нет, я не считаю это цеплянием к словам :-) спасибо, что поправили, теперь вижу разницу между абстрактной и анонимной функциями.
Отделил функции созданные при помощи 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 это все автоматически делается :-/ |
Цитата:
P.S.: Цитата:
|
Наверное остановлюсь на таком варианте, т.к. detachEvent используется редко.
|
Большой постскриптум: (не касающийся темы, просто чтобы исправить мою терминологическую путаницу, которая фигурировала в этом конкретном топике): "все вхождения "function-statement" читать (естественно, и согласно терминологии ECMAScript) как function-expression"
|
Часовой пояс GMT +3, время: 19:04. |