下面是代码:
let box = {
aaa:111,
bbb:222,
ccc:333,
destruct: function() {
let des = (let {bbb} = box);
return des;
}
};
box.destruct();
aaa // return error : aaa is not defined
bbb // return 222
虽然我可以使用这个语法let{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 '='
因此,从这个问题来看,您似乎试图在运行时使用对象box
键值动态创建变量,而您不应该这样做。 但如果这是最后一个选项,那么您应该做如下所示的事情。
null
let box = {
aaa: 111,
bbb: 222,
ccc: 333,
destruct: function () {
for (key in box) {
eval(`${key} = ${box[key]}`);
}
},
};
box.destruct();
console.log(aaa, bbb, ccc);