可以从JavaScript中的ECMAScript 6类继承旧式类吗?

可以从JavaScript中的ECMAScript 6类继承旧式类吗?,javascript,node.js,ecmascript-6,Javascript,Node.js,Ecmascript 6,在Node.js 4.2.1上运行以下代码时: “严格使用”; var util=require('util'); 类MyClass{ 建造师(姓名){ this.name=名称; } } 函数MyDerived(){ 调用(这是“MyDerived”); } 继承(MyDerived,MyClass); var d=新的MyDerived()一旦选择了类语法,就没有真正的出路了 问题是ES6中的继承是通过使用super()的返回值延迟初始化this关键字来完成的,这是一个类似于new的构造函

在Node.js 4.2.1上运行以下代码时:

“严格使用”;
var util=require('util');
类MyClass{
建造师(姓名){
this.name=名称;
}
}
函数MyDerived(){
调用(这是“MyDerived”);
}
继承(MyDerived,MyClass);

var d=新的MyDerived()一旦选择了
语法,就没有真正的出路了

问题是ES6中的继承是通过使用
super()
的返回值延迟初始化
this
关键字来完成的,这是一个类似于
new
的构造函数调用。在当前“未初始化”的子实例上应用父构造函数的老习惯用法不再起作用

您仍然可以求助于“寄生继承”——您必须显式地构造实例,扩展它,然后
返回它:

function MyDerived() {
  var derived = new MyClass('MyDerived');
  … // set up properties
  return derived;
}
但是,当您使用
newmyclass
执行此操作时,您将无法正确设置原型。为此,您需要使用新的ES6函数,该函数将子类作为可选的第三个参数:

function MyDerived() {
  var derived = Reflect.construct(MyClass, ['MyDerived'], new.target||MyDerived);
  … // set up properties
  return derived;
}

这还有另外一个好处,
MyDerived
不再需要用
new
调用(只要在
new.target
为空时提供
MyDerived

一旦选择了
语法,就没有真正的出路了

问题是ES6中的继承是通过使用
super()
的返回值延迟初始化
this
关键字来完成的,这是一个类似于
new
的构造函数调用。在当前“未初始化”的子实例上应用父构造函数的老习惯用法不再起作用

您仍然可以求助于“寄生继承”——您必须显式地构造实例,扩展它,然后
返回它:

function MyDerived() {
  var derived = new MyClass('MyDerived');
  … // set up properties
  return derived;
}
但是,当您使用
newmyclass
执行此操作时,您将无法正确设置原型。为此,您需要使用新的ES6函数,该函数将子类作为可选的第三个参数:

function MyDerived() {
  var derived = Reflect.construct(MyClass, ['MyDerived'], new.target||MyDerived);
  … // set up properties
  return derived;
}
这还有另外一个好处,即不再需要使用
new
调用
MyDerived
(只要在
new.target
为空时提供
MyDerived