在以前版本的JavaScript,实现类私有的私有字段是很麻烦的,各种写法层出不穷,有用闭包加一层的,有用Symbol类型实现的,反正每种方式看起来都怪怪的,不像别的语言Java, C#,甚至Typescript看起来那么舒服。
现在ES2022给出了一个新的标准来实现私有字段,虽然跟别的语言还不太一样,但总算也是给出了一种标准的解决方案。类属性在默认情况下是公有的,ES2022 允许您为类定义私有字段。 要定义私有字段,请在字段名称前加上 # 符号。即 # 是名称本身的一部分,声明和访问时也需要加上。
我们来看一个例子:
在这个例子中:
下面创建 Circle 类的新实例并计算其面积:
因为#radius 是一个私有字段,所以您只能在 Circle 类中访问它。 换句话说,#radius 字段在 Circle 类之外是不可见的。
使用 getter 和 setter 访问私有字段
下面通过添加半径 getter 和 setter 重新定义 Circle 类,以提供对 #radius 私有字段的访问:
私有字段和子类
私有字段只能在定义它们的类中访问。 此外,它们不能从子类中访问。 例如,以下定义了扩展 Circle 类的 Cylinder 类:
如果你试图这样做,会收到错误提示:属性 '#radius' 在类 'Circle' 之外不可访问,因为是私有的。
再有,私有静态方法也不能通过子类访问,如下也会报错:
in 运算符:检查私有字段是否存在
静态私有字段
以下示例显示了如何使用静态私有字段,统计创建Circle实例的数量:
它是怎么工作的:
总结:
感谢阅读!
留言与评论(共有 0 条评论) “” |