Показать сообщение отдельно
  #13 (permalink)  
Старый 18.05.2012, 22:36
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Лень объяснять, лучше посмотри, как меняются переменные
function withEmu( object, f ) {
	var argumentNamesArray = [], // массив имен
	argumentValuesArray = [], // массив значений
	newF;                        
	for( var arg in object ) {
		argumentNamesArray.push( arg ); // "a", "b", "c"
		argumentValuesArray.push( object[ arg ] ); // "1",  "2", "blah"
	}
	argumentNamesArray.push( 'return (' + f + ')()' ); // "a", "b", "c", "return (function() {return [a,b,c];})()"
	newF = Function.apply( null, argumentNamesArray ); // то же самое, что и 
	//Function("a", "b", "c", "return (function() {return [a,b,c];})()") или
	//function(a,b,c){ return (function() {return [a,b,c];})() }
	return newF.apply( null, argumentValuesArray ); // вызываем её с аргументами "1",  "2", "blah"
}

var x = withEmu( {a:1, b:2, c: 'blah'}, function() {
    return [a,b,c];
});

alert( x );
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием