ECMAScript 2020 (ES11) 中的私有方法

阅读时长 6 分钟读完

在 ECMAScript 2020 中,可以使用私有方法来创建仅在类内部可见的方法。这提供了一种更好的封装,使代码更易于维护和扩展。在本文中,我们将介绍私有方法的用途、如何定义和使用它们,以及一些避免常见问题的注意事项。

私有方法的作用

私有方法为类提供了一种安全的方式来隐藏和保护类的内部实现。通常情况下,私有方法用于执行一些与类的内部状态相关的操作,而不是对外部环境产生影响。这使得代码更清晰易懂,避免了不必要的代码冗杂。

举个例子,考虑以下基于类的计算器的实现:

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

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

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

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

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

  ------- -
    ---------- - -
  -
-
展开代码

在这个实现中,所有方法都是公共的,并且都可以从类的外部进行访问和调用。这在某些情况下可能会引起问题,因为这意味着我们不能保证 total 的正确性,例如:

为了避免这种情况发生,我们可以将 total 声明为私有属性,然后创建一些私有方法来处理它,例如:

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

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

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

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

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

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

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

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

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

  ---------- -
    ------ -----------
  -
-
展开代码

在这个实现中,我们使用 # 符号来标记私有属性和方法。我们将 total 声明为私有属性,同时定义了一些私有方法来验证操作数和除数,并清除计算器的状态。这使得我们可以在不暴露内部实现的情况下更好地封装代码。

定义和使用私有方法

要定义私有方法,请在方法名称前面加上 # 符号,例如:

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

  -------------- -
    -- ---- ------- ------
    ---------------------
  -
-
展开代码

在私有方法内部,可以使用 this 关键字来访问类的私有属性和方法,就像在公共方法中一样。但是,私有方法不能从类的外部进行访问和调用,否则将引发 TypeError

要在类的内部调用私有方法,可以使用 this.#methodName() 的形式。

注意事项

使用私有方法时,需要遵守一些基本规则和注意事项:

  1. 私有方法只能在包含它们的类的内部进行访问和调用。试图从类的外部访问或调用私有方法将引发 TypeError
  2. 私有方法的名称必须以 # 符号开头,以将其与公共方法区分开来。名称不得包含空格或任何其他非法字符。
  3. 在私有方法内部,可以使用 this 关键字来访问类的私有属性和方法。但是,注意私有方法也不能访问类的 static 属性或方法。
  4. 无法使用 super 关键字来访问父类的私有方法,因为私有方法无法从类的外部进行访问。

示例代码

以下是一个简单的示例,演示如何在类中定义和使用私有方法:

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

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

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

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

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

----- ---- - --- --------------
---------------- -- ------ ------- -- ---- -- ---------- -- ---- -----
---------- -- ------ ---------
------------- -- ------ ---------
展开代码

在这个示例中,我们创建了一个 Person 类,其中包含一个私有属性 #name 和一个私有方法 #greet()#greet() 方法仅在 introduce() 方法内部调用,并打印出介绍自己的消息。

请注意,尝试从类的外部访问 #name#greet() 方法都会引发 TypeError。这确保了 #name#greet() 是仅在类内部可见的私有组件。

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

纠错
反馈

纠错反馈

程序员教程

精选优质教程,助你快速提升技术实力

程序员面试题库

海量优质面试题,助你轻松应对技术面试