Я, наверное, лучше объясню это через код. Я получил что-то вроде этого:
var object1 = function(){
//do something
}
var object2 = function(){
//do something else
}
var objects = {
'o1' : object1,
'o2' : object2
};
var actions = [];
function addAction( actionName ){
var object = objects[actionName];
actions.push( function(){ new object(); } );
}
Таким образом, этот код сохраняет последовательность действий, определенных во время выполнения, на основе пользовательского ввода, который сохраняется в массиве.
addAction( "o1" );
addAction( "o2" );
Если я хочу воспроизвести эту последовательность, я просто делаю:
for( i in actions ){
actions[i]();
}
и это создаст два анонимных объекта типа object1 и object2.
Теперь мне нужно как-то сериализовать массив actions [], но мне нужно, чтобы каждая функция внутри него сохраняла свою область видимости. Если я просто приведу функции к строкам, я получу:
"function(){ new object(); }"
и если я вычислю эту строку, то 'объект' будет неопределенным. Как бы вы это сделали?