如何知道类构造函数是否通过super调用?

时间:2016-05-15 18:54:06

标签: javascript ecmascript-6

如果我有这个:

class Human {
    constructor(){

    }
}

class Person extends Human {
    constructor(){
        super();
    }
}

是否可以知道是否通过Person类调用了Human的构造函数?我考虑过arguments.callee但是已经弃用了。

1 个答案:

答案 0 :(得分:6)

检查实例是否属于特定子类很容易(但不明智):

class Human {
    constructor(){
        console.log(this instanceof Person);
    }
}

要检查它是否是基类的实例(而不是子类),您可以使用:

Object.getPrototypeOf(this) === Human.prototype

[只要您没有弄乱类并覆盖prototype对象]

您还可以检查this.constructor.name的值 - 它将反映所调用的初始构造函数的类型,并且在调用基类构造函数时不会更改,但如果代码被缩小,则可能会失败