这是代码:
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
虽然我可以使用此语法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 '='
答案 0 :(得分:0)
因此,从这个问题来看,您似乎正在尝试使用对象box
在运行时动态动态创建变量键值,但您不应该这样做。但是,如果这是最后的选择,那么您应该在下面做类似的事情。
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);
答案 1 :(得分:0)
尝试将键设置为window
对象
let box = {
aaa: 111,
bbb: 222,
ccc: 333,
destruct: function () {
Object.assign(window, this, {destruct: undefined})
},
};
box.destruct();
console.log(aaa, bbb, ccc);
let box = {
aaa: 111,
bbb: 222,
ccc: 333,
destruct: function () {
for (key in this) {
if (key == 'destruct') continue
window[key] = this[key]
}
},
};
box.destruct();
console.log(aaa, bbb, ccc);