TypeScript 中的类的访问修饰符

阅读时长 4 分钟读完

TypeScript 中的类的访问修饰符

在 TypeScript 中,类是一个非常常见的特性,它可以把一些相关的属性和方法组织起来,以便程序员能够更好地结构化代码和管理代码的复杂性。但是,实际上,一个类中包含的所有成员并不是全部都需要暴露给外部使用的。这时,我们需要使用访问修饰符来控制成员的访问权限。

在 TypeScript 中,有 3 种访问修饰符,它们分别是 public、private 和 protected,用于限制成员的访问。下面我们将对这 3 种访问修饰符进行详细介绍。

public

public 是 TypeScript 中默认的访问修饰符,这意味着如果没有手动设置访问修饰符的话,所有的成员都是 public 的。public 成员不受限制,可以在任何地方访问。

示例代码:

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

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

上面的示例中,name 和 sayHello 均为 public 成员,可以在任何地方被访问。

private

private 成员只能在类内部被访问,不能在类外部被访问。这种成员通常用于隐藏实现细节,以防止外部对类的实现直接进行修改。

示例代码:

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

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

上面的示例中,age 成员被定义为 private,外部无法访问该成员,但是可以通过公共的 getAge 方法来获取该成员的值。

protected

protected 成员与 private 成员类似,也只能在类的内部访问。但是,与 private 成员不同的是,protected 成员可以在子类中访问。

示例代码:

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

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

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

上面的示例中,Person 类中声明了一个 protected 成员 gender,该成员可以在 Employee 类中被访问,但是在类的外部无法访问。

总结

TypeScript 中的访问修饰符可以很好地控制类成员的访问权限,从而保护类的实现细节,提高代码的安全性和可维护性。在编写类的时候,需要根据使用情况和业务需求,选择合适的访问修饰符。

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

纠错
反馈