Skip to content

当我们在 JavaScript 中使用 new 关键字时,会发生什么?

当你在 JavaScript 中使用 new 关键字时,会执行以下操作:

  1. 创建一个新的空对象。这个对象被称为新创建的对象。
  2. 将新创建的对象的原型设置为构造函数的 prototype 属性。 这意味着,新创建的对象会继承构造函数的 prototype 中定义的属性和方法。
  3. 将新创建的对象的 this 关键字设置为该对象。 这意味着,在构造函数中使用 this 关键字时,它会引用新创建的对象。
  4. 将参数列表传递给构造函数,并调用构造函数。
  5. 如果构造函数没有返回其他对象,则 new 关键字会返回新创建的对象。 如果构造函数返回了其他对象,则 new 关键字会返回构造函数返回的对象。
js
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 关键字执行了以下操作:

  1. 创建了一个新的空对象,该对象被称为 person。
  2. 将 person 对象的原型设置为 Person.prototype。
  3. 将 person 对象的 this 关键字设置为 person 对象。
  4. 将参数 "John" 和 30 传递给 Person 构造函数,并调用该构造函数。
  5. 在 Person 构造函数中,使用 this 关键字为 person 对象添加了 name 和 age 属性,并将它们设置为 "John" 和 30。
  6. 因为 Person 构造函数没有返回其他对象,所以 new 关键字返回 person 对象。

所以,最终我们得到了一个新创建的 person 对象, 该对象具有 name 和 age 属性, 并且继承了 Person.prototype 中定义的属性和方法。