JavaScript 中的 `new` 到底是做什么的?

在 JavaScript 中,我们可以使用 new 关键字来创建一个对象。这个过程看起来很简单,但实际上背后涉及到了许多细节和重要概念。本文将深入探讨 new 的作用,以及使用它时需要注意的事项。

new 做了哪些事情?

当我们使用 new 关键字来创建一个对象时,实际上发生了以下几件事情:

  1. 创建一个空对象。
  2. 将这个空对象的原型指向构造函数的原型对象。
  3. 将构造函数中的 this 指向这个空对象。
  4. 执行构造函数中的代码,并在该对象上定义属性和方法。
  5. 如果构造函数没有显式返回一个对象,则返回这个新创建的对象。

我们可以通过下面的代码来演示这个过程:

-------- ------------ ---- -
  --------- - -----
  -------- - ----
-

----- ------- - --- --------------- ----
--------------------- -- --- ------ -------- ---- ---

在上面的例子中,我们使用 new 关键字创建了一个 Person 对象。在构造函数中,我们使用 this 来指向这个新创建的对象,然后为它设置了两个属性:nameage。最后,我们将这个新对象返回并将它赋值给了 person1 变量。

new 的注意事项

虽然使用 new 关键字创建对象看起来很简单,但有一些细节和注意事项需要我们注意。下面是一些重要的点:

1. 构造函数应该以大写字母开头

按照 JavaScript 的惯例,构造函数应该以大写字母开头,这样可以方便其他程序员识别出它们是构造函数并且应该使用 new 关键字来调用它们。

2. 不使用 new 调用构造函数会导致错误

如果您尝试不使用 new 关键字来调用一个构造函数,那么 this 将不会指向一个新的空对象,而是会指向全局对象(在浏览器中为 window)。这通常会导致意外的行为或错误。

-------- ------------ ---- -
  --------- - -----
  -------- - ----
-

----- ------- - --------------- ---- 
--------------------- -- --- ---------
------------------------ ------------ -- --- ----- --

3. 可以使用 Object.create() 来模拟 new 关键字

如果您不希望使用 new 关键字来创建对象,可以使用 Object.create() 方法来模拟这个过程。这个方法接受一个原型对象作为参数,并返回一个新对象,该对象的原型指向传递的原型对象。

-------- ------------ ---- -
  ----- --- - --------------------------------
  -------- - -----
  ------- - ----
  ------ ----
-

----- ------- - --------------- ----
--------------------- -- --- ------ -------- ---- ---

总结

new 关键字是 JavaScript 中创建对象的常用方法之一。它做了许多事情,包括创建一个空对象,将原型链接到构造函数的原型对象上,以及执行构造函数中的代码等。但是,在使用 new 关键字时需要注意一些细节和注意事项,包括构造函数应该以大写字母开头、不使用 new 调用构造函数会导致错误以及可以使用 Object.create() 方法来模拟 new 关键

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/27384