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

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 декабря 2007 г.09:08

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

  • Дин автор

    28 декабря 2007 г.09:54

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

  • Mischka

    28 декабря 2007 г.16:46

    а если то или это, что будет возвращено?

  • Дин автор

    28 декабря 2007 г.16:51

    Понял, к чему вы клоните, товарищ.

  • Mischka

    28 декабря 2007 г.17: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 декабря 2007 г.17:16

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

  • Mischka

    28 декабря 2007 г.17:18

    но было бы удобно исползовать что-то типа if(listen...

  • Дин автор

    28 декабря 2007 г.17:20

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

  • Mischka

    30 декабря 2007 г.13:52

    тогда else return false действительно имеет только методическое значение. Можно убрать, наверно

  • Дин автор

    30 декабря 2007 г.15:36

    Хорошо.

  • Дин автор

    28 декабря 2007 г.17:16

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

Я тоже знаю!

Для обращения к человеку используйте символ @, после которого следует имя того, к кому обращаетесь (пробелы заменяются на знак подчёркивания). Если вам интересно, можете подписаться на комментарии по RSS или по эл. почте. Ведите себя достойно, вы же не роботы, правда?

Вы можете использовать следующие XHTML-элементы в разметке комментария: strong, em, span[class=crossline], a[href=uri], code[type=язык], blockquote, ul и ol. В качестве языка кода может быть указан, например, javascript или css.