Показать сообщение отдельно
  #2 (permalink)  
Старый 23.11.2017, 10:16
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,796

ami_moor, не знаю правильно ли я понял суть задачи, но:
function test(a, b, c) { return 'a=' + a + ',b=' + b + ',c=' + c; }
var _test=partialAny(test,1,undefined,3,undefined);
console.log(_test(5, 9, 22, "asdasd"));
console.log(_test(1, 2, 4, "7"));


function partialAny(callable,_args){
	if(!arguments.length)
		throw new Error('Missing first argument');

	var args=[];
	for(var i=0;i<arguments.length;i++){
		args[i]=arguments[i];
	};
	
	callable=args.shift();
	
	if(typeof callable!='function')
		throw new Error('First argument must be function');
		
	return function(){
		var _args=args.slice(0);
		
		if(!!arguments.length){
			var blanks=[];
			for(var i=0;i<_args.length;i++){
				if(_args[i]===undefined)
					blanks.push(i);
			};
			
			for(i=0;i<arguments.length;i++){
				var key=blanks.shift();
				if(key!==undefined)
					_args[key]=arguments[i];
				else
					_args.push(arguments[i]);
			};
		};
		
		return callable.apply(window,_args);
	};
};
Ответить с цитированием