ES6 Class中实现私有属性的一些方法总结
私有属性
私有属性是面向对象编程(OOP)中非常常见的一个特性,一般满足以下的特点
- 能被class内部的不同方法访问,但不能在类外部被访问;
- 子类不能继承父类的私有属性。
备胎Class
时间回到四年前,2015年6月,ES6发布成为标准,为了纪念这个历史性时刻,这个标准又被称为ES2015,至此,JavaScript中的class从备胎中转正。在这之前,class一直作为JS的关键字,雪藏不见天日。
class被认为是JS的一种语法糖,它为JavaScript带来了用面向对象的思想描述一个实体的能力。但似乎还远远不够,class的能力远没满足JS开发者们的期待。于是,TC39的大佬们也努力地去做到更好,并推出了一项新的提案
class Foo { #a; // 私有属性 constructor(a, b) { this.#a = a; this.b = b } }
上面私有属性的声明,需要先经过Babel等编译器编译后才能正常使用。
提案已经到Stage 3了,未来可期!
可是,一众JSer们已经等不及了......
JSer的挣扎
通过对数据的一定封装,JS开发者们走上了曲线实现“私有属性”之路。
1. 约定俗成
JS界以一种不成文的规定,在变量前加上下划线"_"前缀,约定这是一个私有属性;但实际上,它仍然是一个穿上皇帝新衣般的公共属性。
2. 闭包
在constructor作用域内定义局部变量,内部载通过闭包的方式对外暴露该变量。
这种方式,虽然实现了私有属性外部不可访问,但在类内部,该属性同样没法在不同的方法内共享,仍然不是严格意义上的“私有属性”。
3. Symbols & Getters
利用Symbol变量可以作为对象key的特点,我们可以模拟实现更真实的私有属性。
可是,也不是毫无破绽
借助getOwnPropertySymbols方法可以取出对象的Symbol键值。
4. WeakMap & Getters
WeakMap的实现与Symbol如出一辙。
巨人的肩膀
以上,是目前阶段JS实现属性私有比较可行的方案,可能实际中很少应用,但如果你在面试中遇到这个问题,或许这些方案可以参考下。
然后,所有这些方案里面,建议选TypeScript的private。
,关于JS中实现私有属性,欢迎读者们评论交流你的看法~
参照
原文
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对狼蚁SEO的支持。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程