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

function partialAny(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.slice();
    
		for(var i = 0; i < newParams.length; i++) {
			if(newParams[i] === void 0) {
				newParams[i] = params2.shift();
			}
		}
    
		newParams = newParams.concat(params);
		return fn.apply(context, newParams);
	}
}


function test(a, b, c) { return 'a=' + a + ',b=' + b + ',c=' + c; }
var test1_3 = partialAny(test, 1, undefined, 3);
alert(test1_3(5)); // a=1,b=5,c=3
Ответить с цитированием