有可能从JavaScript中的ECMAScript 6类继承旧式类吗?
Is it possible to inherit old-style class from ECMAScript 6 class in JavaScript?
在Node.js 4.2.1上运行以下代码时:
'use strict';
var util = require('util');
class MyClass {
constructor(name) {
this.name = name;
}
}
function MyDerived() {
MyClass.call(this, 'MyDerived');
}
util.inherits(MyDerived, MyClass);
var d = new MyDerived();
我得到以下错误:
constructor(name) {
^
TypeError: Class constructors cannot be invoked without 'new'
我想知道是否有可能从ECMAScript 6类继承旧式JavaScript"类"?如果可能的话,怎么做呢?
一旦您选择了class
语法,就没有真正的出路了。
问题是ES6中的继承是通过使用super()
的返回值初始化this
关键字来完成的,这是一个与new
类似的构造函数调用。在当前"未初始化"的子实例上"应用"(.call()
)父构造函数的旧习惯用法使不再工作。
你仍然可以做的是诉诸"寄生继承"——你必须显式地构造实例,扩展它,并return
它:
function MyDerived() {
var derived = new MyClass('MyDerived');
… // set up properties
return derived;
}
当你用new MyClass
这样做时,你不会得到正确的原型设置。为此,您需要使用新的ES6 Reflect.construct
函数,该函数将子类作为可选的第三个参数:
function MyDerived() {
var derived = Reflect.construct(MyClass, ['MyDerived'], new.target||MyDerived);
… // set up properties
return derived;
}
这还有一个额外的好处,即MyDerived
不再需要与new
一起调用(只要在new.target
为空时提供MyDerived
)。
相关文章:
- Javascript 类继承.子类更改主类的属性
- javascript对象继承-子类和超类
- 使用Google闭包库的正确继承/子类实现剖析
- JavaScript:将继承的类添加到数组中不起作用
- 无法在 es6 继承的类中设置属性
- 无法在 JS 中获取继承的类函数
- 是否可以扩展已经从另一个类继承的类
- 有可能从JavaScript中的ECMAScript 6类继承旧式类吗?
- 如何创建一个从Document继承的类
- 在ES6中将一个继承的类复制到另一个
- 为什么原型继承子类是另一个子类的实例?
- 其中继承的类称为函数
- 继承& # 39;类# 39;属性
- Prototypejs的子类不继承超类属性
- 当子类继承超类时,为什么要重置对象构造函数?
- Javascript's原型,如何继承一个类
- Jquery导致表单输入继承错误类
- Js 继承的类实例未定义
- 套接字.Nodejs CoffeeScript在socket.on中获取socket和当前继承的类变量
- 通过$.extend继承父类