在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中的继承是通过this
使用from的返回值对关键字进行后期初始化来完成的,该返回值是from super()
的构造函数,如with
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
多(只要你提供的任何MyDerived
时候new.target
为空)。
问题内容: 今天,我在采访中面临一个问题。是否可以在Singleton类上应用继承概念?我说过,由于构造函数是私有的,因此我们无法扩展该Singleton类。 他问我的下一件事是将继承应用于该Singleton类。因此,我将Singleton的构造函数作为受保护对象,认为孩子的构造函数也已受到保护。但是我错了,孩子可以有一个等于或大于该值的修饰符。 因此,我请他在这种情况下举一个真实的例子。他没能
本文向大家介绍JavaScript中的继承之类继承,包括了JavaScript中的继承之类继承的使用技巧和注意事项,需要的朋友参考一下 继承简介 在JS中继承是一个非常复杂的话题,比其他任何面向对象语言中的继承都复杂得多。在大多数其他面向对象语言中,继承一个类只需使用一个关键字即可。在JS中想要达到继承公用成员的目的,需要采取一系列措施。JS属于原型式继承,得益于这种灵活性,我们既可以
本文向大家介绍JavaScript 类继承,包括了JavaScript 类继承的使用技巧和注意事项,需要的朋友参考一下 示例 继承的工作方式与其他面向对象的语言相同:在超类上定义的方法可在扩展子类中访问。 如果子类声明了自己的构造函数,则它必须先通过调用父构造函数,super()然后才能进行访问this。
问题内容: 接口是否从 Java中的类继承? 如果否,那么我们如何在接口实例上调用对象类的方法 问题答案: 接口是否从 Java中的类继承? 不,他们没有。而且,就这一点而言,也不存在所有接口都隐式继承的通用“根”接口(与类一样)。() 如果否,那么我们如何在接口实例上调用对象类的方法 接口为中的每个公共方法隐式声明一个方法。因此,该方法被隐式声明为接口中的成员(除非它已经从超级接口继承了该方法)
问题内容: 在PHP / Java中,可以做到: 并且,Super类的所有公共/受保护的方法,属性,字段等都会自动成为Sub类的一部分,如有必要,可以重写这些类。 Javascript中的等效功能是什么? 问题答案: 我已经更改了现在的操作方式,我尝试避免使用构造函数和它们的属性,但是我从2010年起的旧答案仍然是最底层的。我现在更喜欢。适用于所有现代浏览器。 我应该注意,这通常比使用函数构造函数
本文向大家介绍String类可以被继承吗?相关面试题,主要包含被问及String类可以被继承吗?时的应答技巧和注意事项,需要的朋友参考一下 String类在声明时使用final关键字修饰,被final关键字修饰的类无法被继承。 接下来我们可以看一下String类的源代码片段: 为什么Java语言的开发者,把String类定义为final的呢? 因为只有当字符串是不可变的,字符串池才有可能实现。