构造函数

js/constructor_function2026-08-24 19:46:25

构造函数 是使用 new 关键字调用的函数,用于创建和初始化对象。构造函数和普通函数在语法上是一样的,唯一的区别在于它们的调用方式和行为。

使用 new 关键字调用函数

当使用 new 关键字调用函数时,该函数将被用作构造函数。new 将执行以下操作:

  1. 创建一个空的简单 JavaScript 对象。为方便起见,我们称之为 newInstance。
  2. 如果构造函数的 prototype 属性是一个对象,则将 newInstance 的 [[Prototype]] 指向构造函数的 prototype 属性,否则 newInstance 将保持为一个普通对象,其 [[Prototype]] 为 Object.prototype。
  3. 使用给定参数执行构造函数,并将 newInstance 绑定为 this 的上下文(换句话说,在构造函数中的所有 this 引用都指向 newInstance)。
  4. 如果构造函数返回非原始值,则该返回值成为整个 new 表达式的结果。否则,如果构造函数未返回任何值或返回了一个原始值,则返回 newInstance。(通常构造函数不返回值,但可以选择返回值,以覆盖正常的对象创建过程。)

使用构造函数创建对象

为了定义对象类型,为对象类型创建一个函数以声明类型的名称、属性和方法。例如,你想为汽车创建一个类型,并且将这类对象称为 Car ,并且拥有属性 make, model,和 year,你可以创建如下的函数:

function Car(make, model, year) {
  this.make = make;
  this.model = model;
  this.year = year;
}

你可以通过调用 new 创建任意数量的 Car 对象。例如:

var kenscar = new Car("Nissan", "300ZX", 1992);
var vpgscar = new Car("Mazda", "Miata", 1990);

这些对象的原型都是 Car.prototype。

new.target

new.target 属性允许你检测函数或构造方法是否是通过 new 运算符被调用的。在通过 new 运算符被初始化的函数或构造方法中,new.target 返回一个指向构造方法或函数的引用。在普通的函数调用中,new.target 的值是 undefined。

相关词条

对象类型(构造函数是创建对象、指定对象原型的一种方法);
构造函数会指定对象原型,详见 对象原型;
使用 类 来更好的编写构造函数。

参考

new
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/new

Constructor
https://developer.mozilla.org/zh-CN/docs/Glossary/Constructor

本页目录