如何检测EcmaScript类是否有自己的构造函数? 请参阅下面的代码段。
class Person {
constructor(name, age) { // <- Own constructor
this._name = name;
this._age = age;
}
}
class Manager extends Person {
// This class does not have it's own constructor
}
&#13;
似乎没有明确的方法来进行此检查。
谢谢大家的时间和帮助。
答案 0 :(得分:2)
它不是防弹的,但您可以将构造函数转换为字符串,并查看它是否包含单词constructor(
或类似的东西
function hasOwnConstructor(instance) {
var str = instance.constructor.toString();
return /class(.*?[^\{])\{([\s\n\r\t]+)?(constructor[\s]+?\()/.test(str);
}
class thing1 {
method() { return this; }
}
class thing2 {
constructor(argument) { return this; }
}
var ins1 = new thing1();
var ins2 = new thing2();
console.log( hasOwnConstructor(ins1) ); // false
console.log( hasOwnConstructor(ins2) ); // true
误报仍然是可能的,但正则表达式使得检查非常严格,所以它不是很合理。
答案 1 :(得分:0)
检查构造函数。
class Example {
constructor(prop1, prop2) {
this.prop1 = prop1;
this.prop2 = prop2;
}
}
您可以通过构造函数将参数传递给您的类,该函数建立可在创建新实例时全局引用的属性。
此行将传递int 1并将“test”作为值传递给prop1和prop2:
const exampleVar = new Example(1, "test");
可能会呈现如下内容:
<Example prop1=1 prop2="test" />
希望这会有所帮助。如果它有一个构造函数,那么有一个构造函数,如果它没有构造函数,那么就没有构造函数。