手机版

在ES6类中实现私有属性的一些方法总结

时间:2021-08-21 来源:互联网 编辑:宝哥软件园 浏览:

私有属性

私有属性是面向对象编程(OOP)中一个非常常见的特性,一般满足以下特征:

可以由类内的不同方法访问,但不能在类外访问;子类不能继承父类的私有属性。备胎等级

回到四年前,2015年6月,ES6作为标准发布。为了纪念这一历史时刻,该标准也被称为S2015。到目前为止,JavaScript中的类已经从备胎变成了正面。在此之前,类一直是JS的关键词,雪中无光。类被认为是JS的语法糖,它给JavaScript带来了用面向对象思想描述实体的能力。但似乎远远不够,类的能力也远远不能满足JS开发者的期望。于是,TC39的老板们也努力做得更好,推出了新的提案:

Foo类{ # a;//私有属性构造函数(a,b) {this。# a=aThis.b=b }}以上私有财产的声明需要经过Babel等编译器编译后才能正常使用。

提案已经到了第三阶段,未来可期!

然而,一群JSer等不及了.

JSer的斗争

通过对数据的封装,JS开发人员走上了实现“私有属性”的道路。

1.公约已经确立

JS世界使用一个不成文的规则,用下划线“_”作为变量的前缀,规定这是一个私有属性;但其实还是像穿皇帝新衣一样的公共属性。

2.关闭

局部变量在构造函数的作用域中定义,内部加载通过闭包将变量暴露给外部。

这样,虽然私有财产不能从外部访问,但不能在类内以不同的方法共享,这仍然不是严格意义上的“私有财产”。

3.符号吸气剂

利用符号变量可以作为对象密钥的特性,我们可以模拟和实现更真实的私有属性。

然而,它并非没有缺陷:

使用getOwnPropertySymbols方法,可以获得对象的符号键值。

4.WeakMap吸杂员

WeakMap实现与Symbol完全相同。

巨人的肩膀

以上是JS目前实现属性隐私的一个可行方案,在实践中可能很少使用,但如果你在面试中遇到这个问题,或许这些方案可以参考。

那么,在所有这些方案中,建议选择TypeScript的private。

最后,关于JS中私有属性的实现,欢迎读者评论和交流看法~

参考:

ECMAScript类-保持隐私

原文:Github

摘要

以上就是本文的全部内容。希望本文的内容对大家的学习或工作有一定的参考价值。谢谢你的支持。

版权声明:在ES6类中实现私有属性的一些方法总结是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。