在 ES11 (即 ES2020)中,JavaScript 为类的封装提供了新的特性:公共字段和私有字段。这两个特性的引入,能够帮助开发者更好地封装类的属性和方法,使得代码更易读、更易维护。
公共字段
公共字段指的是类的实例属性,可以在类中直接定义并初始化。这些属性是可访问的,可以直接从实例对象上访问,也可以通过类名直接访问。
下面是一个简单的示例,展示如何定义和使用公共字段:
-- -------------------- ---- ------- ----- ------- - -- ------ ----------- - -- -- - ------ -------- -- ---- ---------- - ------------------------------ - - -- ------ ----- ---------- - --- ---------- -- ------ ------------------------------------ -- -- -- -- - ------ ------- -- ---- ---------------------- -- -- -- -- - ------ -------
由于公共字段是可访问的,因此它们比较适合用于存储类的实例属性。当需要直接从类的实例对象上访问某些属性时,可以使用公共字段。
私有字段
私有字段是指只能在类的内部访问的字段。这些字段使用 #
符号作为前缀来定义,表示该字段是类的私有成员。
下面是一个示例,展示如何定义和使用私有字段:
-- -------------------- ---- ------- ----- ------- - -- ------ ------------- - -- -- - ------- -------- -- ---- ---------- - -------------------------------- - - -- ------ ----- ---------- - --- ---------- -- ------ -------------------------------------- -- --------------- ------- ----- --------------- ---- -- -------- -- -- --------- ----- -- ---- ---------------------- -- -- -- -- - ------- -------
可以看到,外部无法访问私有字段,只有通过类的内部方法才能访问私有字段。这使得类的属性得到了更好的封装和保护,能够有效防止类的属性被误用或者修改。
深入理解公共和私有字段
在实际开发中,我们经常需要在类的内部定义一些私有变量或函数,这些变量和函数的作用范围仅限于类的内部。在 ES11 之前,我们通常会采用以下几种方式来实现:
- 将变量或函数名称前加上
_
(下划线),表示该变量或函数是私有的,不应该被外部访问; - 在类的构造函数中定义变量或函数,以便它们可以使用
this
关键字来访问类的属性和函数; - 使用闭包实现私有变量或函数。
这些方法在一定程度上能够实现类的封装,但却存在一些问题:
_
前缀并非 JavaScript 语法规定的,它只是一种开发者自己的命名规范。因此,外部仍然可以访问这些变量或函数;- 在构造函数中定义私有变量或函数,会导致类的属性和函数的定义混杂在一起,代码不易理解和维护;
- 使用闭包实现私有变量或函数,会导致代码冗长且不易阅读。
公共字段和私有字段的引入,能够帮助我们更好地解决这些问题。在 ES11 中,类的属性和方法都可以在类的内部直接定义,而不必使用 _
前缀或者在构造函数中定义。私有字段可以保证类的属性和方法的访问范围仅限于类的内部,这使得类的封装变得更加严谨和可靠。
如何使用公共和私有字段
在使用公共和私有字段时,需要注意以下几点:
- 为了能够使用公共字段和私有字段,需要使用支持这些特性的 JavaScript 引擎,例如 Chrome 84+、Firefox 79+ 等。
- 建议在类的定义中,将公共字段定义在类的顶层,将私有字段定义在类的方法中。
- 私有字段可以被继承,但不能被覆盖。
以下是一个示例,演示如何在实际开发中使用公共和私有字段:
-- -------------------- ---- ------- ----- ------ - ----- - ---------- -- ------ ----------------- - ---------- - ----- -- ------ - -- ------ ------- - ---------- -- ------ --- ------ - ------ ----------- - -- ------ ------- - -------------------------- -- ----------- - -- ------ ----- - ------------- -------------------------- -- ----------- - - ----- --- ------- ------ - -- ------ ------- - ------ -- ------ ----- - -------------------------- -- ------- ---- - ------- - - ----- ------- - --- --------------- ----- ------- - --- -------------- ----- ---- - --- ---------------- -------------------------- -- -- ------ -------------------------- -- -- ----- ----------------------- -- -- ---------- ----------- -- -- --------- -- ------- ---- - -----
以上代码定义了一个 Animal
类,该类包含公共字段 species
,公共方法 run()
和私有字段 name
、私有方法 #walk()
。Cat
类继承了 Animal
类,重写了 species
和 run()
方法。通过这个示例,我们可以看到公共和私有字段如何被用在类的定义和方法的实现中。
结论
在 ES11 中,公共和私有字段为 JavaScript 类的封装提供了新的特性。开发者可以使用这些特性来更好地封装类的属性和方法,使得代码更易读、更易维护。在实际开发中,我们应该尽可能地使用公共和私有字段,以提高代码的可靠性和可维护性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/675271628bd460d3ad945b81