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

时间:2020-07-03 14:15:40

标签: 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 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 '='

2 个答案:

答案 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);