📜  如何检测函数是否被称为构造函数?(1)

📅  最后修改于: 2023-12-03 15:24:51.378000             🧑  作者: Mango

如何检测函数是否被称为构造函数?

在 JavaScript 中,我们可以使用 new 关键字来创建一个新的对象。在创建对象时,我们可以使用构造函数或工厂函数。

构造函数是一个特殊的函数,它具有以下特征:

  • 函数名以大写字母开头;
  • 使用 new 关键字调用该函数。

示例代码:

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

var person1 = new Person("Tom", 20);
var person2 = new Person("Jerry", 25);

在这个例子中,Person 函数就是一个构造函数,它用于创建 Person 对象。

如何检测函数是否为构造函数呢?以下是几种常见的方法:

1. 使用 instanceof 运算符

instanceof 运算符用于检测一个对象是否是另一个对象的实例。

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

var person = new Person("Tom", 20);

console.log(person instanceof Person); // 输出 true

上面的代码中,personPerson 的实例,因此返回 true

2. 使用构造函数的 prototype 属性

每个 JavaScript 函数都有一个 prototype 属性,它是一个对象,包含了由该函数创建的所有对象的共享属性和方法。

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

console.log(Person.prototype.constructor === Person); // 输出 true

上面的代码中,Person.prototype.constructor 指向 Person 函数本身,因此返回 true

3. 使用 Object.getPrototypeOf() 方法

Object.getPrototypeOf() 方法返回指定对象的原型。如果指定对象没有原型,则返回 null

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

var person = new Person("Tom", 20);

console.log(Object.getPrototypeOf(person) === Person.prototype); // 输出 true

上面的代码中,Object.getPrototypeOf(person) 返回 Person.prototype,因此返回 true

综上所述,我们可以使用 instanceof 运算符、构造函数的 prototype 属性或者 Object.getPrototypeOf() 方法来检测一个函数是否为构造函数。