如何检测 JavaScript (ES6) class 是否有非默认构造函数?

How to detect if JavaScript (ES6) class has a non-default constructor?

我想通过某种形式的反射或其他方式知道给定的 ES6 class 是否具有用户编写的非默认构造函数。

假设用户提供的构造函数有一个或多个参数,你可以通过检查函数的length 属性来做到这一点(class).但是如果构造函数不带参数,据我所知根本没有办法

function Person(fName, lName) {
    this.firstName = fName;
    this.lastName = lName
}
console.log(Person.length);

function Person2() {}
console.log(Person2.length);

class Person3 {
    constructor(f,l) {}
}
console.log(Person3.length);

class Person4 {
}
console.log(Person4.length);

您可以调用 Classname.prototype.constructor.toString()(其中 Classname 是检查的 class 名称)并获取 class 的源字符串。然后您可以解析它并查看它是否是声明的构造函数。

据推测,您需要一个像样的解析器,但这是另一回事了。

参考文献: