在 ECMAScript 6 中,我们都非常熟悉 "new" 关键字,它用于创建一个新对象,并将其绑定到一个构造函数中。然而,随着时间的推移,JavaScript 技术也在不断地更新和改进,"new" 关键字也逐渐被一些开发者所弃用。事实上,ECMAScript 2019 为我们提供了一些新的方法来改善 "new" 关键字的使用方式。
"new" 关键字的简要概述
让我们首先来回顾一下 "new" 关键字的作用以及使用方式。"new" 关键字用于创建对象,并将对象与构造函数绑定。可以将实例的相关属性和方法存储在原型中,并将实例绑定到构造函数的原型中,以实现继承并共享方法和属性。
以下是一个简单的构造函数示例:
-- -------------------- ---- ------- -------- ------------ ---- - --------- - ----- -------- - ---- - ------------------------- - ---------- - ------------------- -- ---- -- - - --------- - - --- - -- - - -------- - - ----- ------- -- ----- ---- - --- -------------- ---- ---------------- -- ------- ------- -- ---- -- ---- --- - -- -- ----- -----
在上面的代码中,我们创建了一个名为 "Person" 的构造函数,它有两个参数:name 和 age。我们在构造函数中设置了实例的 name 和 age 属性,并在原型上定义了一个名为 sayHello 的方法。然后我们使用 "new" 关键字创建了一个新的 Person 实例对象,并执行了它的 sayHello 方法。
"new" 关键字的问题
尽管 "new" 关键字在创建对象方面非常有用,但是实际上,它也存在一些问题:
- 构造函数的名称必须以大写字母开头,增加了代码的复杂性。
- "new" 关键字会创建对象并将其绑定到构造函数中。这可能会使代码更难以维护和测试。
- 如果忘记使用 "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