Javascript 确定是否从继承的类调用super()

Javascript 确定是否从继承的类调用super(),javascript,inheritance,ecmascript-6,Javascript,Inheritance,Ecmascript 6,有没有办法确定继承类是否费心在JavaScript中调用了super() function A() { A.prototype.isInitialized = function() { // what can be checked to see if B bothered to called super() } } class B extends A { //constructor() { // didn't call super() //} }

有没有办法确定继承类是否费心在JavaScript中调用了
super()

function A() {

  A.prototype.isInitialized = function() {
      // what can be checked to see if B bothered to called super()
  }  
}

class B extends A {
   //constructor() {
   // didn't call super()
   //}
}

假设B没有自己的构造函数。它是否只是使用了A的构造函数,从而在默认情况下有效地调用了super

是的,没有构造函数与只调用
super
的构造函数相同,因此您不必担心父级未初始化

A类{
构造函数(){
this.isInit=true
}
isInitialized(){
返回!!这是我的
}
}
B类扩展了A类{
构造函数(){
超级()
}
}
C类扩展了{
}
b=新的b()
console.log(b.isInitialized())
c=新的c()

console.log(c.isInitialized())
是的,没有构造函数与只调用
super的构造函数相同,因此您不必担心父级未初始化

A类{
构造函数(){
this.isInit=true
}
isInitialized(){
返回!!这是我的
}
}
B类扩展了A类{
构造函数(){
超级()
}
}
C类扩展了{
}
b=新的b()
console.log(b.isInitialized())
c=新的c()

console.log(c.isInitialized())
如果不调用A的构造函数,就不可能创建B的实例(除非您不使用将为您创建的对象,并返回另一个对象,请参阅下文)

如果您没有为类B指定构造函数,则会为您创建一个如下所示的构造函数(在您的示例中没有参数):

如果显式地为B创建构造函数,并且不返回对象,则必须在其中调用
super
,否则无法创建B的实例。以下操作将产生错误:

函数A(){
console.log('hi');
}
类B扩展了{
构造函数(){
//没有呼叫super
}
}

var b=新的b();//引用错误:`this`未定义
不调用A的构造函数就无法创建B的实例(除非您不使用将为您创建的对象,并返回另一个对象,请参阅下文)

如果您没有为类B指定构造函数,则会为您创建一个如下所示的构造函数(在您的示例中没有参数):

如果显式地为B创建构造函数,并且不返回对象,则必须在其中调用
super
,否则无法创建B的实例。以下操作将产生错误:

函数A(){
console.log('hi');
}
类B扩展了{
构造函数(){
//没有呼叫super
}
}


var b=新的b();//参考错误:`this`未定义
何时调用
初始化?我想在构造B之后?它不会自动调用。您可以添加创建对象、执行方法和显示预期输出的示例代码吗?可能还会在调用
super
时添加一个case。是否有原因将构造函数语法(对于a)与类语法(对于B)混合在一起?是的,我只是想弄清楚当ES6中没有自己的构造函数而构造B时会发生什么。什么时候调用了
I初始化
?我想在构造B之后?它不是自动调用的。您可以添加创建对象、执行方法和显示预期输出的示例代码吗?可能还会在调用
super
时添加一个case。是否有原因将构造函数语法(对于a)与类语法(对于B)混合在一起?是的,我只是想弄清楚当B在ES6中没有自己的构造函数的情况下被构造时会发生什么。我想这也意味着“this”在这种情况下被绑定了。
这个
被绑定到了什么?在哪里?我想这也意味着在这种情况下“this”被绑定了。
这个
被绑定到了什么?在哪里?您可以使用
类B扩展一个{constructor(){return Object.create(B.prototype);}}
。如果你不调用
super()
,你就不能在构造函数中使用
this
,必须显式地
返回一些东西。啊,是的,显式返回:没有想到。你可以使用
类B扩展一个{constructor(){return Object.create(B.prototype);}
。如果你不调用
super()
,你就不能在构造函数中使用
this
,必须显式地
返回一些东西。啊,是的,显式返回:我没想到。
constructor(...args) {
    super(...args);
}