Две примитивные функции

27 декабря 2007 года, 22:41

Две функции — bind и listen. Функция bind предназначена для создания callback-функции, чтобы получить возможность использования внутренних методов объекта в обработке событий. Функция listen предназначена для кроссбраузерного назначения обработчика события объекту.

/* toObject - объект для привязки methodName - имя метода внутри объекта (передаётся строкой) */ function bind(toObject, methodName) { return function(e){toObject[methodName](e)} } /* object - объект для прослушивания события hevent - название события (строка) hfunc - метод-обработчик */ function listen(object, hevent, hfunc) { if (object.addEventListener) object.addEventListener(hevent,hfunc,false); else if (object.attachEvent) object.attachEvent('on'+hevent,hfunc); }

Мнения (11)

Все эти хорошие люди уже прокомментировали запись. Поделитесь собственным мнением, расскажите, что вы думаете о поставленной проблеме, задаче, озвученных мыслях.

  • Mischka

    28 декабря 200709:08 в listen можно дописать else return false.
    Методически это будет красивее. Да и мало ли какой браузер попадется.
  • Дин

    28 декабря 200709:54 Методически красивее - согласен. Сейчас если не то и не это, будет просто возвращён null.
  • Mischka

    28 декабря 200716:46 а если то или это, что будет возвращено?
  • Дин

    28 декабря 200716:51 Понял, к чему вы клоните, товарищ.
  • Mischka

    28 декабря 200717:11 пока что мне это видится вот так (хоть и чувствую, что это не идеально):
    [code=js]
    function listen(object, hevent, hfunc){
    var result = false;
    if(object.addEventListener){
    object.addEventListener(hevent, hfunc, false);
    result = true
    }
    else{
    if(object.attachEvent){
    object.attachEvent('on' + hevent, hfunc);
    result = true
    }
    }
    return result
    }
    [/code]
  • Дин

    28 декабря 200717:16 Не обязательно возвращать результат. Есть другие способы узнать, назначился ли верно обработчик. Причём, иные способы установки обработчика не существуют, а оставшиеся 3% пользователей текстовых браузеров мы гоним в тундру.
  • Mischka

    28 декабря 200717:18 но было бы удобно исползовать что-то типа if(listen...
  • Дин

    28 декабря 200717:20 Зачем? Обработчик назначается всегда без проблем. Для всех браузеров. Никаких проблем никогда не возникает.
  • Mischka

    30 декабря 200713:52 тогда else return false действительно имеет только методическое значение. Можно убрать, наверно
  • Дин

    30 декабря 200715:36 Хорошо.
  • Дин

    28 декабря 200717:16 Подсветка в комментариях не работает, BB-кодов нет ;)

Я тоже знаю!

Вы можете тоже написать собственный комментарий. Если хотите к кому-то обратиться, используйте символ @, после которого не забудьте написать имя того, к кому обращаетесь. Не забывайте про существование XHTML-элементов, с помощью которых вы можете оформить ваш комментарий как вам угодно. И, да: ведите себя достойно, вы же не роботы, правда? Если вам интересно, можете подписаться на комментарии по RSS.