在面向对象编程中,类中定义的方法通常可以分为公共方法和特权方法两种类型。在 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