ES11 之 private 访问

阅读时长 3 分钟读完

JavaScript 是一种基于原型的语言,没有传统面向对象语言的公共/私有/受保护等访问控制级别,开发人员不得不通过约定来达到相同的效果。这不仅增加了维护成本,而且不太安全。

ES11 的 private 访问符在类中引入了以下概念:

  • 私有实例字段:仅在类内部可见的实例成员
  • 私有静态字段:仅在类内部可见的静态成员

它们都可以使用符号#作为前缀定义,如下所示:

这个例子定义了一个名为 Foo 的类,它有一个私有实例字段 x 和一个私有静态字段 count。

访问私有成员

私有实例成员和私有静态成员不能从类外访问。任何尝试访问它们的代码都会导致 SyntaxError:

但是,类内部可以访问这些成员:

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

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

私有成员的继承

私有实例成员和私有静态成员不能从子类访问。它们不像公共成员、受保护成员和私有方法那样可访问。如果我们在子类中定义同样名字的私有成员(使用#前缀),它们将隐藏父类的同名成员。这种行为与其他私有成员保持一致。

继承的私有成员虽然已被隐藏,但不影响基类本身的私有成员的访问。我们可以通过定义一个受保护的访问器方法来访问它:

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

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

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

总结

ES11 的私有访问符号为在类定义中引入了一个新概念,它允许开发人员定义仅在类内部可见的成员。这消除了原型约定和风格的需要,并带来了更好的可维护性和安全性。

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

纠错
反馈