我可能最好通過代碼解釋這一點。我有這樣的事情:一個棘手的JavaScript問題
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和對象2的兩個匿名對象。
現在,我需要以某種方式序列化動作[]數組,但我需要其中的每個函數來保留它的範圍。如果我只是投的功能爲字符串,我得到:
"function(){ new object(); }"
,如果我EVAL這個字符串,然後「對象」將是不確定的。你會如何做到這一點?