JavaScript如何检测函数是构造函数?可用于区分Class和Object类型

在JavaScript中,构造函数是一种特殊类型的函数,用于创建具有特定类型或蓝图的对象。构造函数通常用大写字母命名,这是一种惯例,有助于将它们与其他函数区分开来。如果您需要检测一个函数是否是JavaScript中的构造函数,可以使用几种方法来实现这一点。

方法一:检测函数的原型(推荐)

function MyConstructor() {
  // constructor code here
}

// check if MyConstructor is a constructor
if (MyConstructor.prototype.constructor === MyConstructor) {
  console.log('MyConstructor is a constructor');
} else {
  console.log('MyConstructor is not a constructor');
}

方法二:检测函数是否可被“new”操作符调用

function isConstructor(func) {
  try {
    new func();
    return true;
  } catch (e) {
    return false;
  }
}

function Person(name) {
  this.name = name;
}

console.log(isConstructor(Person)); // true

const person = Person('John');
console.log(isConstructor(person)); // false

方法三:检测函数创建的对象的构造函数属性

function Person(name) {
  this.name = name;
}

var person = new Person("John");

console.log(person.constructor === Person); // true

原文:https://stacktuts.com/how-to-check-if-a-javascript-function-is-a-constructor