Помогите разобраться, как реализовать данный метод?
Реализовать метод foo, чтобы код работал.
function bar(a, b){ return a + b; } var x = foo(bar, 1); x(2); // 3 var y = foo(bar, 2, 5); y(); // 7 Пытался сделать несколько методов foo под разное кол-во переменных, но не вышло. |
Sannn,
ищи по словам Function.prototype.bind |
function foo(fn) { var args = Array.prototype.slice.call(arguments, 1); return function() { return fn.apply(this, args.concat(Array.prototype.slice.call(arguments))); } } function bar(a, b){ return a + b; } var x = foo(bar, 1); alert(x(2)); // 3 var y = foo(bar, 2, 5); alert(y()); // 7 |
Цитата:
|
Спасибо, но можно пару вопросов?
var args = Array.prototype.slice.call(arguments, 1); Вот это строкой мы делаем массив из аргументов, кроме 1ого. return function() { return fn.apply(this, args.concat(Array.prototype.slice.call(arguments))); } А вот эта строчка чуть-чуть запутала. Мы возвращаем функцию, которая возвращает результат функции bar, вызывая ее в контексте чего? При этом передаем функции bar это: мы к массиву args добавляем весь массив аргументов arguments. Можно подробно рассказать этот момент, я запутался. Пожалуйста. |
Часовой пояс GMT +3, время: 07:07. |