Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.09.2013, 12:45
Новичок на форуме
Отправить личное сообщение для Sannn Посмотреть профиль Найти все сообщения от Sannn
 
Регистрация: 11.09.2013
Сообщений: 2

Помогите разобраться, как реализовать данный метод?
Реализовать метод 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 под разное кол-во переменных, но не вышло.
Ответить с цитированием
  #2 (permalink)  
Старый 11.09.2013, 12:58
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

Sannn,

ищи по словам Function.prototype.bind
Ответить с цитированием
  #3 (permalink)  
Старый 11.09.2013, 13:02
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

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
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #4 (permalink)  
Старый 11.09.2013, 13:03
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Яростный Меч
ищи по словам Function.prototype.bind
не подойдет, бинд не только складывает аргументы, но и привязывает к контексту.. где первый его параметр является контекстом
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #5 (permalink)  
Старый 11.09.2013, 17:55
Новичок на форуме
Отправить личное сообщение для Sannn Посмотреть профиль Найти все сообщения от Sannn
 
Регистрация: 11.09.2013
Сообщений: 2

Спасибо, но можно пару вопросов?
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. Можно подробно рассказать этот момент, я запутался. Пожалуйста.

Последний раз редактировалось Sannn, 11.09.2013 в 18:19.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ПОМОГИТЕ разобраться со скриптом (картинка праздничного дня) Zhuk13@ya.ru Общие вопросы Javascript 7 08.12.2013 19:51
Как реализовать.. PaperPlane Общие вопросы Javascript 17 15.11.2010 08:14
Прелоадер (помогите разобраться) xsfd AJAX и COMET 6 16.09.2010 02:30
Помогите разобраться с кодом. TheWanderer Общие вопросы Javascript 10 17.04.2010 13:41
Помогите разобраться в повторным обращении к функции, как её обнулить. AdvoGad Общие вопросы Javascript 0 01.09.2008 11:35