弃用 ECMAScript 6 中的 "new" 关键字,ECMAScript 2019 如何改进它

阅读时长 5 分钟读完

在 ECMAScript 6 中,我们都非常熟悉 "new" 关键字,它用于创建一个新对象,并将其绑定到一个构造函数中。然而,随着时间的推移,JavaScript 技术也在不断地更新和改进,"new" 关键字也逐渐被一些开发者所弃用。事实上,ECMAScript 2019 为我们提供了一些新的方法来改善 "new" 关键字的使用方式。

"new" 关键字的简要概述

让我们首先来回顾一下 "new" 关键字的作用以及使用方式。"new" 关键字用于创建对象,并将对象与构造函数绑定。可以将实例的相关属性和方法存储在原型中,并将实例绑定到构造函数的原型中,以实现继承并共享方法和属性。

以下是一个简单的构造函数示例:

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

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

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

在上面的代码中,我们创建了一个名为 "Person" 的构造函数,它有两个参数:name 和 age。我们在构造函数中设置了实例的 name 和 age 属性,并在原型上定义了一个名为 sayHello 的方法。然后我们使用 "new" 关键字创建了一个新的 Person 实例对象,并执行了它的 sayHello 方法。

"new" 关键字的问题

尽管 "new" 关键字在创建对象方面非常有用,但是实际上,它也存在一些问题:

  1. 构造函数的名称必须以大写字母开头,增加了代码的复杂性。
  2. "new" 关键字会创建对象并将其绑定到构造函数中。这可能会使代码更难以维护和测试。
  3. 如果忘记使用 "new" 关键字,并且没有使用严格模式(strict mode),那么 this 将指向全局对象,而不是新的实例对象,从而导致错误。

ECMAScript 2019 中的改进

将来ECMAScript的版本中可能会完全弃用“new”这个概念,但是在 ECMAScript 2019 中,我们已经有了一些改进的方法来减轻 "new" 关键字所带来的问题。

"Class" 关键字

在 ECMAScript 2019 中,我们可以通过使用 "Class" 关键字来创建抽象的数据类型。相对于 "new" 关键字,"Class" 关键字更加直观,代码也更易于阅读和维护。下面是一个使用 "Class" 关键字的示例:

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

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

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

在上面的代码中,我们定义了一个名为 Person 的类,它有两个属性:name 和 age。我们还定义了一个名为 sayHello 的方法,用于打印出实例信息。然后,我们使用 "new" 关键字创建了一个 Person 实例对象,并使用其 sayHello 方法。

相对于 "new" 关键字,使用 "Class" 关键字的优点在于:

  • 我们可以避免使用大写字母来命名构造函数。
  • 类的定义更加直观且易于阅读和理解。
  • 代码更加容易维护和测试。

"Object.create()" 方法

除了 "Class" 关键字之外,我们还可以使用 "Object.create()" 方法来创建对象。 "Object.create()" 方法是一个非常强大的方法,它可以创建一个新对象,并将其关联到指定的原型对象。下面是一个使用 "Object.create()" 方法创建实例对象的示例:

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

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

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

在上面的代码中,我们定义了一个名为 "person" 的对象,并在该对象上定义了两个方法:init 和sayHello。我们使用 "Object.create()" 方法创建了一个新对象,并将其关联到 "person" 对象的原型上。最后,我们使用 init 方法为新对象设置属性,并使用 sayHello 方法输出实例信息。

相对于 "new" 关键字,使用 "Object.create()" 方法的优点在于:

  • 我们可以将实例属性和方法存储在原型中,并将这些实例绑定到特定的原型对象上。
  • 我们可以创建多个对象共享同一个原型,从而实现简单的继承。

总结

在本文中,我们回顾了 "new" 关键字的作用和问题,并为您介绍了使用 "Class" 关键字和 "Object.create()" 方法来改善 "new" 关键字的用法。相对于 "new" 关键字,这两种方法更加直观且易于阅读和理解,同时也更容易维护和测试。鉴于此,我们鼓励开发者们尝试并广泛应用这些方法,以提高代码的质量和性能。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/649f8c7548841e9894be60f0

纠错
反馈