JavaScript:如何检测ES6类有自己的构造函数?

时间:2017-09-08 20:01:49

标签: javascript inheritance constructor

如何检测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;
&#13;
&#13;

似乎没有明确的方法来进行此检查。

谢谢大家的时间和帮助。

2 个答案:

答案 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" />

希望这会有所帮助。如果它有一个构造函数,那么有一个构造函数,如果它没有构造函数,那么就没有构造函数。