Javascript 中的公共方法和特权方法:为什么会这样命名?

在面向对象编程中,类中定义的方法通常可以分为公共方法和特权方法两种类型。在 Javascript 中同样存在这两种方法,但许多人可能对它们的名称感到困惑,因为它们似乎与传统面向对象编程语言的用法不同。本文将探讨 Javascript 中的公共方法和特权方法,并解释为什么它们被称为这样。

公共方法

在 Javascript 中,公共方法是指可以从任何地方访问和调用的方法。这些方法通常在类的原型中定义,在实例化后也可以通过实例访问。例如,我们定义了一个叫做Person的类,其中包含一个公共方法greet:

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

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

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

在上面的示例中,greet 方法是公共的,因此我们可以在类的实例中调用它。所有实例都有访问该方法的权限。

特权方法

与公共方法不同,特权方法只能被类的实例和子类进行访问和调用。这意味着在类外部无法直接访问和调用这些方法。特权方法通常通过使用闭包和访问器来实现,并将其添加到类的构造函数中。例如,我们定义了一个叫做Person的类,其中包含一个特权方法_secret:

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

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

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

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

在上面的示例中,_secret 是类的私有变量,无法从外部直接访问。但是我们可以通过 getSecret 方法来访问它,因此这个方法是特权方法。

为什么被称为公共方法和特权方法?

现在我们已经了解了 Javascript 中的公共方法和特权方法,但为什么它们被称为这样?原因在于 Javascript 的访问控制模型与传统面向对象编程语言略有不同。

在传统的面向对象编程语言中,如 Java 和 C++,访问修饰符(public、private、protected)用于限制对类成员的访问。这意味着只有具有相应权限的代码才能访问或调用该成员。但是,在 Javascript 中并没有这些访问修饰符。

在 Javascript 中,所有属性和方法都是公共的,可以从任何地方访问和调用。因此,在 Javascript 中,“公共方法”一词实际上没有太大意义。相反,“特权方法”一词更加准确地描述了只能被类的实例和子类所访问和调用的方法。

结论

在本文中,我们探讨了 Javascript 中的公共方法和特权方法,并解释了为什么它们被称为这样。尽管 Javascript 的访问控制模型与传统面向对象编程语言略有不同,但通过使用闭包和访问器,我们可以模拟出特权方法的行为。当你设计一个复杂的 Javascript 类时,考虑使用特权方法来隐藏类的内部状态,以防止外部代码意外地修改它。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/31433