【发布时间】:2017-08-22 12:16:07
【问题描述】:
我一直在reading about ES modules 进行实验,偶然发现了一个我无法解释的案例:
// settings.js
export const FOO = 42;
export const BAR= 5;
// main1.js
import * as settings from './settings';
settings.FOO = 1;
//main2.js
import {FOO, BAR} from './settings'
FOO = 1;
在main1.js 中,我可以通过settings 变量覆盖const 值,但在main2.js 中我不能(如预期的那样)。
(理论上的)问题是为什么在第一种情况下可以覆盖const 值?创建“只读视图”是否只是在常规对象上创建属性并破坏原始结构?
实际问题是从模块返回一组常量(或只读属性)的最有效方法是什么?我的想法是这样的:
// settings.js
export default Object.freeze({
FOO: 42,
BAR: 5
});
有什么想法吗?
编辑:我正在使用 Babel。
【问题讨论】:
-
你从来没有在你的问题中说,你使用的是什么模块实现?因为这个问题的答案完全取决于你使用的编译器。
-
@loganfsmyth 是 Babel,你认为这是实现中的错误吗?
-
我认为我们没有针对它的特定错误,尽管它绝对是一个已知的缺陷。如果您想提交,欢迎提交。
标签: javascript ecmascript-6 babeljs es6-modules