在 JavaScript 中,对象的属性(包括方法)都是公开的,即可以被外部访问和修改。在某些情况下,我们希望某些属性或方法只能在对象内部使用,不希望被外部访问或修改,这就是私有属性和方法的概念。ES9(即 ECMAScript 2018)中引入了私有字段(Private Fields)的概念,让我们可以更方便地创建私有属性和方法。
定义私有字段
ES9 中,我们可以使用 #
符号来定义私有字段。例如,下面的代码定义了一个名为 Person
的类,其中包含一个私有字段 #name
和一个公开方法 getName()
:
-- -------------------- ---- ------- ----- ------ - ------ ----------------- - ---------- - ----- - --------- - ------ ----------- - - ----- - - --- -------------- ------------------------- -- ------ --------------------- -- --------------- ------- ----- ------- ---- -- -------- -- -- --------- -----
在上面的代码中,我们使用 #name
定义了一个私有字段,它只能在 Person
类内部使用。在类的构造函数中,我们可以通过 this.#name
来给私有字段赋值。在公开方法 getName()
中,我们可以通过 this.#name
来访问私有字段的值。注意,私有字段不能在类的外部访问,否则会报错。
私有字段的特点
私有字段有以下几个特点:
- 私有字段只能在类的内部访问,不能在类的外部访问。
- 私有字段不能被继承。
- 私有字段可以与公开字段同名,不会发生冲突。
下面的代码演示了私有字段的第二个特点:
-- -------------------- ---- ------- ----- ------ - ----- - ------ - ----- ------- ------- ------ - ------------- - -------- ------------------------ -- --------------- ------- ----- ------- ---- -- -------- -- -- --------- ----- - - ----- - - --- ----------
在上面的代码中,我们定义了一个名为 Person
的类,其中包含一个私有字段 #name
。然后,我们定义了一个名为 Student
的子类,它继承自 Person
。在 Student
的构造函数中,我们尝试访问 #name
,结果会报错。这是因为私有字段不能被继承。
私有字段的应用
私有字段的应用场景很多,例如:
- 封装数据,防止外部直接访问和修改。
- 隐藏实现细节,提高代码安全性和可维护性。
- 避免字段名冲突,提高代码可读性。
下面的代码演示了私有字段的第一个应用场景:
-- -------------------- ---- ------- ----- ----- - --- --- -------------- -- - ------- - -- ------- - -- - ------- - ------- - -- - ------- - ------- - -- - ------ - ------ -------- - ------ - ------ -------- - - ----- - - --- -------- --- ---------------------- -- ---- ---------------------- -- ---- ---------- ---------- ---------------------- -- ---- ---------------------- -- ---- ------------------ -- --------------- ------- ----- ---- ---- -- -------- -- -- --------- -----
在上面的代码中,我们定义了一个名为 Point
的类,其中包含两个私有字段 #x
和 #y
,表示点的横坐标和纵坐标。在类的构造函数中,我们可以通过 this.#x
和 this.#y
来给私有字段赋值。在公开方法 setX()
和 setY()
中,我们可以通过 this.#x
和 this.#y
来修改私有字段的值。在公开方法 getX()
和 getY()
中,我们可以通过 this.#x
和 this.#y
来访问私有字段的值。注意,私有字段不能在类的外部访问,否则会报错。
总结
ES9 中的私有字段为我们提供了一种更方便、更安全、更可维护的封装方式。通过定义私有字段,我们可以更好地控制数据的访问和修改,避免因字段名冲突而导致的错误,提高代码的可读性和可维护性。在实际开发中,我们可以根据需要使用私有字段来优化代码的设计和实现。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/657e6f11d2f5e1655d943467