提问者:小点点

通过对象键破坏对象?


下面是代码:

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 '='

共1个答案

匿名用户

因此,从这个问题来看,您似乎试图在运行时使用对象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);