当你在 JavaScript 中使用 new 关键字时,会执行以下操作:
- 创建一个新的空对象。这个对象被称为新创建的对象。
- 将新创建的对象的原型设置为构造函数的 prototype 属性。 这意味着,新创建的对象会继承构造函数的 prototype 中定义的属性和方法。
- 将新创建的对象的 this 关键字设置为该对象。 这意味着,在构造函数中使用 this 关键字时,它会引用新创建的对象。
- 将参数列表传递给构造函数,并调用构造函数。
- 如果构造函数没有返回其他对象,则 new 关键字会返回新创建的对象。 如果构造函数返回了其他对象,则 new 关键字会返回构造函数返回的对象。
function Person(name, age) {
this.name = name;
this.age = age;
}
const person = new Person('John', 30);
console.log(person.name); // "John"
console.log(person.age); // 30
这个例子中,我们创建了一个 Person 类的构造函数,该构造函数接受两个参数:name 和 age。
然后,我们使用 new 关键字调用了 Person 构造函数,并传递了两个参数:"John" 和 30。在这个过程中,new 关键字执行了以下操作:
- 创建了一个新的空对象,该对象被称为 person。
- 将 person 对象的原型设置为 Person.prototype。
- 将 person 对象的 this 关键字设置为 person 对象。
- 将参数 "John" 和 30 传递给 Person 构造函数,并调用该构造函数。
- 在 Person 构造函数中,使用 this 关键字为 person 对象添加了 name 和 age 属性,并将它们设置为 "John" 和 30。
- 因为 Person 构造函数没有返回其他对象,所以 new 关键字返回 person 对象。
所以,最终我们得到了一个新创建的 person 对象, 该对象具有 name 和 age 属性, 并且继承了 Person.prototype 中定义的属性和方法。