在 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 类中,我们使用了私有属性和方法,以及公共方法来访问私有属性和方法,从而实现了类属性的封装和安全性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67da5181a941bf713423faab