在 Javascript 中,有什么方法可以导入(或要求)一个模块没有从该模块导出的对象?
我意识到这可能是不好的做法,但我想知道这是否可能。我有 Python 背景,所以我对我可以导入模块但无法在 Javascript 中访问其所有数据元素的想法感到困惑。
不使用模块 API。模块导出一个对象,并且导入该模块的任何代码都会获得对该对象的引用(JS 意义上的“引用”)。
规范的第 15.2.3节涵盖了导出,并且非常详细地表明该export
关键字用于在模块的导入/导出表中包含一些局部变量。很简单,如果您不指定export
,则该变量是模块范围的本地变量。
这与旧版 IIFE 模块的行为相匹配,后者使用函数作用域来隐藏其局部变量,然后导出一个对象以使其公开。
ES6 模块如:
export class Foo {
...
}
export const bar = new Foo();
Run Code Online (Sandbox Code Playgroud)
转译后将如下所示:
(function () {
function Foo() {
...
}
var bar = new Foo();
return {
Foo: Foo,
bar: bar
};
})();
Run Code Online (Sandbox Code Playgroud)
大多数关于 JS 模块的文章(甚至是精彩的 2ality 模块文章)都没有提到未导出的变量会发生什么。
为了进行比较,CommonJS 模块标准规定模块有一个变量exports
,并且“模块可以在执行时添加其 API”。CommonJS 标准是我迄今为止发现的唯一一个仅通过关键字/对象导出的参考(来自模块上下文 2.1):
模块必须使用“exports”对象作为唯一的导出方式。
归档时间: |
|
查看次数: |
2321 次 |
最近记录: |