小编典典

如何在ES2015中将所有属性分解为当前作用域/封闭关系?

javascript

我想做这样的事情:

const vegetableColors = {corn: 'yellow', peas: 'green'};

const {*} = vegetableColors;

console.log(corn);// yellow
console.log(peas);// green

我似乎找不到或不知道如何做到这一点,但我真的以为我以前看过它!:P

注: 我使用的是babel与stage设置为0;

语境:
我试图在JSX中变得更干燥,而不是引用this.statethis.props无处不在。而且,如果数据发生更改,也不必继续添加属性以进行解构。


阅读 246

收藏
2020-05-01

共1个答案

小编典典

我认为您正在寻找该with声明,它完全符合您的要求:

const vegetableColors = {corn: 'yellow', peas: 'green'};
with (vegetableColors) {
    console.log(corn);// yellow
    console.log(peas);// green
}

但是,出于充分的原因, 不推荐使用 (在严格模式下,其中包括ES6模块)。

将所有属性分解为当前范围

您无法在ES61中使用。那是一件好事。明确介绍要引入的变量:

const {corn, peas} = vegetableColors;

或者,可以使用扩展全局对象,Object.assign(global,vegetableColors)以将它们置于全局范围内,但实际上,这比with声明要糟糕。

1:…虽然我不知道ES7中是否有允许这种事情的草案,但我可以告诉您,任何提案都会被TC否决:-)

2020-05-01