gpt4 book ai didi

javascript - 一个棘手的javascript问题

转载 作者:行者123 更新时间:2023-11-30 07:29:53 25 4
gpt4 key购买 nike

我可能最好通过代码来解释这一点。我得到了这样的东西:

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(); }"

如果我评估这个字符串,那么“对象”将是未定义的。你会怎么做?

最佳答案

为什么不将 Action 的名称与对象中的函数一起保留,以便您可以将其用于序列化:

function Action(name, func) {
this.name = name;
this.func = objects[name];
}

function addAction(actionName) {
actions.push(new Action(actionName));
}

运行函数的代码会略有变化:

for (i in actions) actions[i].func();

要序列化数组,您只需将名称放在字符串中:

var s = '';
for (i in actions) {
s += (s.length == 0 ? '' : ',') + actions[i].name;
}

然后要反序列化,您只需根据名称重新创建对象:

var names = s.split(',');
for (i in names) {
addAction(new Action(names[i]));
}

关于javascript - 一个棘手的javascript问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1053247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com