有没有办法在父类中获取子类的名称?

时间:2016-12-12 09:44:32

标签: javascript

我试图在它的超类(A)中打印出B类或C类的名称。有没有办法从上下文中以某种方式推断出这一点?我是否必须将名称传递给super作为参数,或者有更好的方法吗?

class A {
  constructor(){
    console.log(klass_name) // klass_name is some code to get the name of class B,C
  }
}

class B extends A {
  constructor() {
    super();
  }
}

class c extends A {
  super();
}

3 个答案:

答案 0 :(得分:9)

是的,您可以通过以下两种方式访问​​它:

  • this.constructor.name(假设什么都没有搞乱),你可以在任何有权访问实例的地方使用
  • new.target.name(仅在构造函数中可用,new.target在函数调用中undefined不是new操作的一部分)

但除了记录目的等以外,超类很少需要知道关于子类的任何内容。

示例:



class A {
  constructor(){
    console.log("this.constructor.name = " + this.constructor.name);
    console.log("new.target.name = " + new.target.name);
  }
}

class B extends A {
}

class C extends A {
}

new C;




constructor属性会自动设置在类的原型上以引用类的构造函数,并且从ES2015开始,函数(包括构造函数)具有name属性他们给出了他们的名字。由于实例继承自原型,因此您可以使用constructor来访问该构造函数及其name

new.target元属性在函数中可用,以指示new表达式的目标函数是什么。

旁注:当你的子类构造函数只是对超类构造函数的调用时,你可以完全不用它。 JavaScript引擎将为您添加一个。

答案 1 :(得分:1)

实例可以通过this.constructor获取其构造函数。该函数的名称可用作属性.name。所以,它出人意料地直截了当:

console.log(this.constructor.name)

答案 2 :(得分:1)

this.constructor.name

应该做的伎俩。

相关问题