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

Сообщение от DjDiablo
Не выдумывай
так не интересно ничего не выдумывать

Недавно адаптировал скрипт для работы в браузере, ну и чтобы работало в IE8, убирал из скрипта NFE, например:
document.addEventListener("click", function callback(event) {
     document.removeEventListener("click", callback);
     …
});

нужно переделать в:
function callback(event) {
     document.removeEventListener("click", callback);
     …
}
document.addEventListener("click", callback);
Но это муторно все функции переделывать в FD, иногда имена совпадают, не всегда нужны эти функции в общем скопе и т.д.
arguments.callee использовать нельзя, потому что весь код в strict режиме исполняется в нормальных браузерах.
Можно облегчить себе жизнь, написав функцию, наподобие bind, но выполняющую привязку только для первого аргумента, и в качестве значения этого аргумента должна отправляться ссылка на bound-функцию:
function nfe(targetFunc) {
    function boundFunc() {
        Array.prototype.unshift.call(arguments, boundFunc);
        return targetFunc.apply(this, arguments);
    }
    return boundFunc;
}

Теперь можно делать так:
document.addEventListener("click", nfe(function (callback, event) {
    document.removeEventListener("click", callback);
    …
}));

или так:
setTimeout(nfe(function (onTime) {
    …
    setTimeout(onTime, 100);
}), 100);
Ответить с цитированием