Показать сообщение отдельно
  #2 (permalink)  
Старый 08.12.2016, 12:11
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

function partial(fn) {
	var context = this, //Сохраняем текущий контекст
  		params = Array.prototype.slice.call(arguments); //Преобразуем аргументы в нормальный массив с помощью такого хака
	params.shift(); //Убираем первый аргумент, так как он у нас уже есть в качестве "fn" и дальше не нужен
	
	return function() { //Возвращаем новую ф-цию
		var params2 = Array.prototype.slice.call(arguments); //Дополнительные параметры также преобразуем в массив
		var newParams = params.concat(params2); //Склеиваемзабинденные параметры + дополнительные (текущие);
		return fn.apply(context, newParams); //Вызываем "fn" с сохранённым контекстом и с склеенными параметрами
	}
}


function mult(a, b, c, d) { return a * b * c * d; }

var mult23 = partial(mult, 2, 3); // мы зафиксировали первые 2 аргумента mult() как 2 и 3

alert(mult23(4, 5)); // 2*3*4*5 = 120
alert(mult23(1, 1)); // 2*3*1*1 = 6
Ответить с цитированием