3 回答

TA贡献1111条经验 获得超0个赞
我认为您正在寻找该with声明,它完全符合您的要求:
const vegetableColors = {corn: 'yellow', peas: 'green'};
with (vegetableColors) {
console.log(corn);// yellow
console.log(peas);// green
}
但是,有充分的理由不建议使用(在严格模式下,其中包括ES6模块)。
将所有属性分解为当前范围
您无法在ES6 1中使用。那是一件好事。明确说明要引入的变量:
const {corn, peas} = vegetableColors;
另外,您可以使用扩展全局对象Object.assign(global, vegetableColors)以将它们置于全局范围内,但实际上,这比with声明要糟糕。
1:…虽然我不知道ES7中是否有允许这种事情的草案,但我可以告诉您,任何提案都会被TC否决:-)

TA贡献1829条经验 获得超6个赞
我认为您正在寻找:
const {corn, peas} = vegetableColors;
依靠Babel的REPL直播
如果Pointy是对的,那么您在不知道cornand 的名称的情况下询问如何执行此操作peas,则无法进行销毁分配。
您只能使用循环在全局范围内进行操作,但是我确定您不想在全局范围内执行此操作。不过,以防万一:
// I'm sure you don't really want this, just being thorough
Object.keys(vegetableColors).forEach((key) => {
Object.defineProperty(this, key, {
value: vegetableColors[key]
});
});
(enumerable: true如果希望这些伪常量可枚举,则在该处抛出。)
这在全局范围内有效,因为this引用了全局对象。

TA贡献1860条经验 获得超8个赞
我仍然认为这将是一个有用的功能,但是我可以看到论点的另一面。在任何情况下,with
它都不是“解决方案”的imo,因为现在您必须包装整个模块with
并添加级别缩进,这比在每个函数调用前添加对象名称或在顶部使用名称导入所有内容都更糟糕。破坏。
添加回答
举报