私有属性
私有属性是面向对象编程(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
摘要
以上就是本文的全部内容。希望本文的内容对大家的学习或工作有一定的参考价值。谢谢你的支持。