在 ES2021 中,增加了对私有类方法和字段的支持,这使得前端开发者可以更好地封装类属性,提高代码的可维护性和安全性。
什么是私有类方法和字段
私有类方法和字段是指只能在类内部访问的方法和属性,外部代码无法访问。在 ES6 中,我们可以使用 Symbol 类型的属性来模拟私有属性,但是这种方式并不完美,因为外部代码仍然可以通过一些技巧访问到这些属性。而在 ES2021 中,我们可以使用 # 符号来定义私有属性和方法,这种方式更加安全和可靠。
如何定义私有类方法和字段
定义私有类方法和字段非常简单,只需要在属性或方法名称前加上 # 符号即可。例如:
class MyClass {
#privateField;
#privateMethod() {
// do something
}
}在上面的代码中,我们定义了一个名为 MyClass 的类,并且定义了一个私有属性 #privateField 和一个私有方法 #privateMethod。
如何访问私有类方法和字段
由于私有类方法和字段只能在类内部访问,因此我们不能直接从外部访问它们。但是,我们可以在类内部定义公共方法来访问私有属性和方法。例如:
-- -------------------- ---- -------
----- ------- -
--------------
---------------- -
-- -- ---------
-
----------------- -
------ -------------------
-
---------------------- -
------------------ - ------
-
------------------- -
----------------------
-
-在上面的代码中,我们定义了三个公共方法:getPrivateField、setPrivateField 和 callPrivateMethod,它们分别用于获取、设置和调用私有属性和方法。
私有类方法和字段的优势
私有类方法和字段的引入,使得我们可以更好地封装类属性,避免外部代码直接访问和修改类内部数据,提高代码的可维护性和安全性。同时,私有类方法和字段还可以防止命名冲突,避免意外修改类属性。
示例代码
下面是一个使用私有类方法和字段的示例代码:
-- -------------------- ---- -------
----- ------ -
------
-----
----------------- ---- -
---------- - -----
--------- - ----
-
--- ------ -
------ -----------
-
--- ----------- -
-- ------- ----- --- --------- -
----- --- ----------- ---- -- - ---------
-
---------- - ------
-
--- ----- -
------ ----------
-
--- ---------- -
-- ------- ----- --- -------- -- ----- - -- -
----- --- ---------- ---- -- - -------- ---------
-
--------- - ------
-
--------------- -
----- --- - --- -------
------ ----------------- - ----------
-
----------- -
----- --------- - ---------------------
--------------- ---- -- -------------- - --- ---- -- ---------------
-
-
----- ---- - --- -------------- ----
----------------- -- -- ---- -- ----- - --- ---- -- ----
--------- - --------- -- ------ ---- ---- -- - ------
-------- - ---- -- ------ --- ---- -- - -------- ------在上面的代码中,我们定义了一个名为 Person 的类,它有两个私有属性 #name 和 #age,以及一个私有方法 #getBirthYear。我们还定义了四个公共方法:constructor、introduce、name 和 age,它们分别用于创建对象、介绍自己、获取和设置姓名和年龄。在 Person 类中,我们使用了私有属性和方法,以及公共方法来访问私有属性和方法,从而实现了类属性的封装和安全性。
Source: FunTeaLearn,Please indicate the source for reprints https://funteas.com/post/67da5181a941bf713423faab