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