类继承中的 ECMAScript 2018(ES9) private 关键字

阅读时长 4 分钟读完

ECMAScript 2018(也称为 ES9)是 JavaScript 的最新版本,它引入了许多新功能和改进,其中包括对类继承的支持。在 ES9 中,新增了 private 关键字,用于定义类的私有成员。本文将详细介绍私有成员以及如何在类继承中使用它们。

什么是私有成员?

在一个类中,通常会有一些成员只能在类内部使用,而不能被外部访问,这样的成员就被称为私有成员。

在 JavaScript 中,通常使用下划线(_)来表示私有成员,虽然这并不是一种官方的约定。例如,以下代码定义了一个名为 Person 的类,其中包含一个私有成员 _name:

-- -------------------- ---- -------
----- ------ -
  ----------------- -
    ---------- - ----- -- ------ -----
  -
  
  --------- -
    ------ ----------- -- ------------ -----
  -
-

在这个例子中,_name 是 Person 类的私有成员,它只能被 getName() 方法访问,而不能被外部代码访问。

ES9 中的 private 关键字

ES9 中新增了一种定义私有成员的方式,即使用 private 关键字。使用 private 关键字定义的成员只能在类的内部访问,外部无法访问。以下是使用 private 关键字定义私有成员的代码示例:

-- -------------------- ---- -------
----- ------ -
  ----------------- -
    ---------- - ----- -- ------ -----
  -
  
  --------- -
    ------ ----------- -- ------------ -----
  -
  
  -------- - -- ------ ------
    ------------------- -----------------
  -
  
  ---------- -
    -------------- -- ------------ ------
  -
-

在这个例子中,#name 是 Person 类的私有成员,只能在类的内部访问。#greet() 是私有方法,也只能在类的内部访问。sayHello() 方法调用了私有方法 #greet()。

需要注意的是,private 关键字只能用于 class 内部,不能用于 class 外部。也就是说,无法通过实例对象访问私有成员,也无法通过继承访问父类的私有成员。

在类继承中使用私有成员

在类继承中,私有成员通常需要被继承,否则子类无法访问父类的私有成员。ES9 中提供了一种解决方案,即使用 super 关键字访问父类的私有成员。以下是继承 Person 类并访问父类私有成员的代码示例:

-- -------------------- ---- -------
----- -------- ------- ------ -
  ----------------- ------ -
    ------------ -- ---------
    ----------- - ------ -- ------ ------
  -
  
  ---------- -
    ------ ------------ -- ------------ ------
  -
  
  ----------- -
    --------------- ---- -- -------------- --- --- - ------------------ -- --------- -----
    -------------- -- --------- ------
  -
-

在这个例子中,Employee 类继承了 Person 类,并定义了一个私有成员 #title。introduce() 方法通过 super 关键字访问了父类的私有成员 #name 和私有方法 #greet()。

需要注意的是,子类无法直接访问父类私有成员,而是需要通过父类提供的公共方法或 super 关键字来访问。因此,在类设计时需要考虑如何提供公共接口,以便子类能够访问父类的私有成员。

总结

在 ES9 中,private 关键字为类继承中的私有成员提供了一种新的定义方式,它比传统的下划线约定更加规范和语义化。使用 private 关键字可以将私有成员定义在类的内部,并通过继承和 super 关键字访问父类的私有成员。需要注意的是,私有成员只能在类的内部访问,外部无法访问。

有了私有成员,类的设计变得更加灵活和可维护。合理地使用私有成员可以保护类的内部状态,避免外部代码的干扰。同时,它也提高了代码的可复用性和可扩展性,使得类的继承更加方便和自然。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/659f8ebcadd4f0e0ff82183c

纠错
反馈