在过去,JavaScript 中并没有“真正”的私有变量或方法。然而,ECMAScript 2019(也称为 ES12)为开发者们带来了新的功能,相信您将感到非常兴奋,因为 ES12 具有私有变量和方法的支持。本文将重点介绍 ES12 中的私有变量和方法,并提供示例代码,帮助您了解如何使用它们。
什么是私有变量和方法?
在面向对象编程(OOP)中,私有变量和方法是指可以被对象内部访问,但不能被外部代码访问的属性和方法。这意味着只有对象本身才能访问这些属性和方法,而无法通过对象的实例或对象本身之外的另一个东西访问它们。
ES12 中的私有变量
ES12 中有两种方法来创建私有变量:
1. 使用 #
前缀
在 ES12 中,您可以使用 #
前缀来定义私有变量,即在变量名前加上 #
前缀。
-- -------------------- ---- ------- ----- ------ - ----- - ----- ----- --- ------ - ------ ----------- - --- ----------- - ---------- - ------ - - ----- ------ - --- --------- ------------------------- -- ------- ----- ---- ----------- - ----- ----- ------------------------- -- ------- ----- ----
在上面的示例代码中,我们创建了一个名为 Person
的类,并定义了一个名为 #name
的私有变量。我们还创建了一个 getter 和 setter 方法来获取和设置 #name
的值。
2. 使用 WeakMap
除了 #
前缀之外,ES12 还支持使用 WeakMap
来创建私有变量。要使用 WeakMap
来创建私有变量,请使用以下代码:
-- -------------------- ---- ------- ----- ----- - --- ---------- ----- ------ - ----------------- - --------------- ------ - --------- - ------ ---------------- - - ----- ------ - --- ------------ ------ ------------------------------ -- ------- ----- ----
在上面的示例代码中,我们创建了一个名为 _name
的 WeakMap
,并在 constructor
方法中使用了它。我们还创建了一个名为 getName
的方法来获取 name
的值。
需要注意的是,WeakMap
中的键是对象,这意味着您必须使用对象来访问相应的值。如果没有提供这个对象,您将无法访问这个值。这就是为什么 [_name].get(this)
将返回 undefined
。
ES12 中的私有方法
在 ES12 中,您可以使用 #
前缀来创建私有方法,方法名前加上 #
前缀即可。这与创建私有变量时的方式相同。
-- -------------------- ---- ------- ----- ------- - ---------------- - ----------------- -- - ------- ---------- - -------------- - ---------------------- - - ----- ------- - --- ---------- ----------------------- -- ------- ----- -- - ------- --------
在上面的示例代码中,我们创建了一个名为 MyClass
的类,并定义了一个名为 #privateMethod
的私有方法。我们还定义了一个名为 publicMethod
的公共方法,通过 publicMethod
方法可以访问私有方法 #privateMethod
。
结论
ES12 中的私有变量和方法为 JavaScript 中开发者带来了更加灵活的编程方式。使用 #
前缀或 WeakMap
,您可以轻松地创建私有变量和方法,并可以确保对象本身才是唯一可以访问这些属性或方法的对象。
值得注意的是,私有变量和方法不能被继承类访问,但是子类可以覆盖它们。这就是为什么私有变量和方法被称为“私有”的原因。它们只能在对象内部使用,而不能在对象之外访问。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67301e84eedcc8a97c911e59