Javascript 使用对象键值对动态创建变量?

Javascript 使用对象键值对动态创建变量?,javascript,javascript-objects,Javascript,Javascript Objects,代码如下: let box = { aaa:111, bbb:222, ccc:333, destruct: function() { let des = ( {bbb} = box); return des; } }; box.destruct(); aaa // return error : aaa i

代码如下:

let box = {   
        aaa:111,
        bbb:222,
        ccc:333,
        destruct: function() { 
                   let des = ( {bbb} = box);
                   return des; 
                }
};
   

box.destruct();
aaa // return error : aaa is not defined
bbb // return 222
虽然我可以使用这种语法
让{aaa,bbb,ccc}=box
,这很好。将来可能会有一种情况,即在对象内部添加另一对键和值,例如
ddd:444,eee:555
。因此,
destruct:function()…
中的编码也必须更新

我想通过使用
eval()
object.keys().join()
来改进对象分解编码。这是我能走的路

        destruct : function() { 
                    let str = Object.keys( box ).join(); // "aaa,bbb,ccc"
                    let des = eval( "{" + str + "} = box" );
                    return des;
}

box.destruct() // return Unexpected token '='

因此,从这个问题来看,似乎您正在尝试使用对象
键值在运行时动态创建变量,而您不应该这样做。但是如果这是最后一个选择,那么你应该做下面这样的事情

let box={
aaa:111,
bbb:222,
ccc:333,
析构函数:函数(){
用于(输入框){
eval(`${key}=${box[key]}`);
}
},
};
box.destruct();

控制台日志(aaa、bbb、ccc)尝试将键设置为
窗口
对象

let box={
aaa:111,
bbb:222,
ccc:333,
析构函数:函数(){
assign(窗口,this,{destruct:undefined})
},
};
box.destruct();

控制台日志(aaa、bbb、ccc)我认为您的第一个代码不起作用…?如何
返回Object.assign({},this)
您希望从
析构函数
方法中得到什么-您的
对象的所有键的值?为什么不直接使用
Object.values(box)
?这似乎是一个你想要实现的目标?我理解ideia,但我不确定这是否好,因为你不知道对象的变量名。谢谢!以前从未想过分配给窗口。看起来也很整洁!“…而你不应该这么做。”为什么?是因为eval()吗?或者整个想法本身?你可以参考这个答案,也可以使用这种方法创建全局变量,如果不考虑,这些变量可能会覆盖其他重要变量。谢谢!我会记住全局变量。也许我会暂时使用奇特的变量命名。