JavaScript - 类在条件下扩展

标签 javascript node.js class ecmascript-6 extends

事情就是这样。我有一个名为 A 的主要类(class)。
我希望这个类扩展 B 类。

class A extends B {}

但实际上,我希望 B 类在特定条件下扩展 C、D 或 E:
class B extends B1 {}

或者
class B extends B2 {}

或者
class B extends B3 {}

所以 B 类将是一个“假”类,只是为了检查一个条件然后扩展正确的类。
在决赛中,结果将与以下内容相同:
class A extends B1 {}

或者
class A extends B2 {}

或者
class A extends B3 {}

我知道这在 PHP 中是可能的,例如抽象类或包装类。
但是如何在 JavaScript ES6 中做到这一点?

谢谢

最佳答案

奇怪,但可能:

class subClassFirst {

  report() {
    console.log(`Extended ${this.name} from the first class`);
  }
}

class subClassSecond {

  report() {
    console.log(`Extended ${this.name} from the second class`);
  }
}

class subClassThird {

  report() {
    console.log(`Extended ${this.name} from the third class`);
  }
}

function classCreator(condition) {
  let sub;
  switch (condition) {
    case 'first':
      sub = subClassFirst;
      break;
    case 'second':
      sub = subClassSecond;
      break;
    case 'third':
      sub = subClassThird;
      break;
  }

  return (class extends sub {
    constructor(name) {
      super();
      this.name = name;
    }
  });
}

let myClass;

myClass = classCreator('first');
let mcf = new myClass('f');

myClass = classCreator('second');
let mcs = new myClass('s');

myClass = classCreator('third');
let mct = new myClass('t');

mcf.report();
mcs.report();
mct.report();

关于JavaScript - 类在条件下扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42599560/

相关文章:

javascript - sprockets 未正确处理 js 文件中的 erb

JavaScript条件评估: compare number literal

node.js - 我应该为 Nodejs 模型和 Controller 使用类吗

node.js - Express 未捕获到 '/' 的请求

javascript - 如何使用 Angular 根据父级和子级获取 key

javascript - 在 ZEND 中缓存 Javascript 文件和 CSS

java - 从 Java 中的扩展类 B 将字符串添加到抽象类 A 中的数组

swift - 便利初始化与自初始化

node.js - 在 nest.js Controller 中使用类验证器验证嵌套对象

C++ 方法声明不兼容