可以从JavaScript中的ECMAScript 6类继承旧式类吗?
在Node.js 4.2.1上运行以下代码时:可以从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的构造函
“严格使用”;
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
)