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

 更新时间:2019年07月08日 09:48:57   作者:_安歌  
这篇文章主要给大家介绍了关于ES6 Class中实现私有属性的一些方法,文中通过示例代码介绍的非常详细,对大家学习或者使用ES6具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

私有属性

私有属性是面向对象编程(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中实现私有属性,欢迎读者们评论交流你的看法~

参照:

ECMAScript Classes - Keeping Things Private

原文:Github

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

相关文章

  • webpack4从0搭建组件库的实现

    webpack4从0搭建组件库的实现

    这篇文章主要介绍了webpack4从0搭建组件库的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • js带闹铃功能的倒计时代码

    js带闹铃功能的倒计时代码

    这篇文章主要为大家详细介绍了js带闹铃功能的倒计时代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • TS中declare的简单使用方法

    TS中declare的简单使用方法

    declare 关键字用来告诉编译器,某个类型是存在的,可以在当前文件中使用,本文给大家介绍TS中declare的简单使用方法,感兴趣的朋友一起看看吧
    2023-12-12
  • JavaScript实现与使用发布/订阅模式详解

    JavaScript实现与使用发布/订阅模式详解

    这篇文章主要介绍了JavaScript实现与使用发布/订阅模式,较为详细的分析了发布/订阅模式的概念、原理并结合实例形式分析了javascript实现与使用发布/订阅模式的相关操作技巧,需要的朋友可以参考下
    2019-01-01
  • javascript图片延迟加载实现方法及思路

    javascript图片延迟加载实现方法及思路

    这篇文章主要介绍了javascript图片延迟加载实现方法及思路,有时我们需要用懒加载,也就是延迟加载图片的方式,来提高网站的亲和力,需要的朋友可以参考下
    2015-12-12
  • javascript简单实现图片预加载

    javascript简单实现图片预加载

    本文是给大家分享一段简单的实现图片预加载技术的javascript代码,超级精简,却很实用,这里推荐给大家
    2014-12-12
  • 纯js模拟div层弹性运动的方法

    纯js模拟div层弹性运动的方法

    这篇文章主要介绍了纯js模拟div层弹性运动的方法,涉及javascript操作div层实现运动的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • 使用JavaScript制作待办事项列表的示例代码

    使用JavaScript制作待办事项列表的示例代码

    这篇文章主要介绍了如何使用 JavaScript创建待办事项列表HTML的完整信息和教程,文中但是示例代码讲解详细,感兴趣的同学可以动手试一试
    2022-01-01
  • JavaScript Image对象实现原理实例解析

    JavaScript Image对象实现原理实例解析

    这篇文章主要介绍了JavaScript Image对象实现原理实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • JavaScript This指向问题详解

    JavaScript This指向问题详解

    这篇文章主要介绍了JavaScript This指向问题详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11

最新评论