Маленькие тонкости JS: bind - apply - call - ?
С вопросом оптимизации, рано или поздно, но сталкиваются почти все. И не важно, на чем вы пишите, JavaScript, C++, C#, PHP или другой язык. Вот и мне, как-то (уже давно) пришлось этим заниматься. Вот тогда я и узнал, все прелести функций bind, call, apply в JS.
(кто ещё не задумывался, стоит заглянуть сюда).
С тех пор, я старался использовать bind очень осторожно и значительно чаще оборачивать вызов callback в другую функцию.
Но постоянно писать обертку надоедает и читается такой код чуть медленнее (bind все-таки мне сразу кидается в глаза). Поэтому через некоторое время, появились пару функций, которыми и собираюсь поделиться.
Вариант 1. Уже быстрее, но всё-равно немного ползем.
Function.prototype._bind = function(ptr){
var func = this;
return (function(){ return func.apply(ptr, arguments); });
};
Вариант 2. С ограничениями, но быстро.
Function.prototype._bind = function(ptr){
var func = this;
return (function(){ return func.call(ptr, arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]); });
};
Можно заметить, что второй вариант имеет ограничения по передаче параметров. Т.е. в данном случае их всего 5, но до текущего дня, мне этого вполне хватало.
Успехов и приятного "творчества".
Keep your comment...