gpt4 book ai didi

javascript - ES2015 中的条件导出

转载 作者:可可西里 更新时间:2023-11-01 01:49:56 26 4
gpt4 key购买 nike

假设您正在开发一个 polyfill,并且如果某个类已经存在于浏览器中,您不想填充它。这在 ES6 中如何实现?以下内容无效,因为 exports 不是语句:

if (typeof Foo === 'undefined') {
export class Foo { ... }
}

如果上述条件的计算结果为 false,则导入脚本应该内置浏览器。

最佳答案

export 应该是静态的。对于条件导出,可以使用 CommonJS 模块和 exports

ES6 模块应该这样处理:

export let Foo;

if (window.Foo === undefined) {
Foo = class Foo { ... }
} else {
Foo = window.Foo;
}

对于独立于平台的解决方案(this 在转译代码中可能不等于 global)window 可以替换为

const root = (() => eval)()('this');
if (root.Foo === undefined) {
...

这利用了以这种方式设计的 ES6 模块的绑定(bind)特性 to handle cyclic dependencies并做了很大的解释here .

上面的代码transpiles to

...
var Foo = exports.Foo = void 0;

if (window.Foo === undefined) {
exports.Foo = Foo = function Foo() {
_classCallCheck(this, Foo);
};
} else {
exports.Foo = Foo = window.Foo;
}

在这种情况下,导出不是有条件的,但是绑定(bind)到此导出的 Foo 值是有条件的。

关于javascript - ES2015 中的条件导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39583958/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com