构造函数 是使用 new 关键字调用的函数,用于创建和初始化对象。构造函数和普通函数在语法上是一样的,唯一的区别在于它们的调用方式和行为。
使用 new 关键字调用函数
当使用 new 关键字调用函数时,该函数将被用作构造函数。new 将执行以下操作:
- 创建一个空的简单 JavaScript 对象。为方便起见,我们称之为
newInstance。 - 如果构造函数的
prototype属性是一个对象,则将newInstance的[[Prototype]]指向构造函数的prototype属性,否则newInstance将保持为一个普通对象,其[[Prototype]]为Object.prototype。 - 使用给定参数执行构造函数,并将
newInstance绑定为this的上下文(换句话说,在构造函数中的所有this引用都指向newInstance)。 - 如果构造函数返回非原始值,则该返回值成为整个
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