Menu

Маленькие тонкости 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, но до текущего дня, мне этого вполне хватало.

Успехов и приятного "творчества".

Tags:
js, bind, apply, call, closure

Keep your comment...