Javascript 扩展函数的导出类
我想导出从特定父级“动态”继承的类:Javascript 扩展函数的导出类,javascript,class,ecmascript-6,export,Javascript,Class,Ecmascript 6,Export,我想导出从特定父级“动态”继承的类: // moduleA import {localConstructor} from 'aPackage'; const globalCondition = () => { if (window.GlobalConstructor) { return window.GlobalConstructor; } else { return localConstructor; } } export default class ex
// moduleA
import {localConstructor} from 'aPackage';
const globalCondition = () => {
if (window.GlobalConstructor) {
return window.GlobalConstructor;
} else {
return localConstructor;
}
}
export default class extends globalCondition() {
...
}
// moduleB
import Module from 'moduleA';
const m1 = new Module(); // use local constructor
window.GlobalConstructor = ...;
const m2 = new Module(); // use global constructor
但是,
globalCondition
仅在“导出”时调用,因此我无法动态调整对象的类型。如果导出的类应该依赖于某些动态条件,则它应该是工厂函数:
// moduleA
import {localConstructor} from 'aPackage';
export default () => {
return class extends (window.GlobalConstructor || localConstructor) {...}
}
// moduleB
import moduleFactory from 'moduleA';
const Module = moduleFactory();
const m1 = new Module(); // use local constructor
通过窗口
在ES模块之间进行通信不是一种好的做法。可以将构造函数传递给函数,而不是设置window.GlobalConstructor=…
;这是一个常规的混合配方:
// moduleA
import {localConstructor} from 'aPackage';
export default (Constructor = localConstructor) => {
return class extends Constructor {...}
}
// moduleB
import moduleFactory from 'moduleA';
const Module = moduleFactory(...);
const m2 = new Module(); // use global constructor