博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅析Symbol
阅读量:4694 次
发布时间:2019-06-09

本文共 664 字,大约阅读时间需要 2 分钟。

不知道大家有没有留意ES6中的Symbol函数?在此之前,我对Symbol的认识知识这样的:

 一、Symbol()和Symbol.for('str')

Symbol()是独一无二的,你无法创建两个相同的Symbol对象出来,但是Symbol.for()会帮你去找某一个Symbol对象,如果找到了那就返回这个已经创建过的Symbol对象,如果找不到,就帮你创建一个,总不能空手而归吧。

所以,我们可以通过Symbol.for()来找以前创建的Symbol对象(实际上按照ES6的说法他是一个新的基本数据类型)。

二、Symbol()作为属性名

js中为一个对象添加/读取属性有两种方式:点操作、中括号,以前属性名只能是字符串类型(不是字符串会自动转字符串):

现在,对象的属性名可以是Symbol类型啦

三、Symbol类型不可被枚举

 

四、解决如上问题

利用Object的相应Api可以获得Symbol属性,利用反射可以获得包括Symbol在内的所有属性。

五、不可枚举以及唯一性的用途/应用场景

因为不可枚举以及唯一性,我们可以利用这个特性实现属性的私有化

ES6提供了class,但是没有提供private关键字,此时我们可以用Symbol实现属性的私有化;

在模块内部定义Symbol变量来作为类的属性,这样在模块外部因为无法创建一个相同的Symbol所以就无法访问类的该属性了。

因为不想去写demo了,直接盗图:

 

转载于:https://www.cnblogs.com/eco-just/p/10426198.html

你可能感兴趣的文章
【转】IT名企面试:微软笔试题(1)
查看>>
IO流入门-第十章-DataInputStream_DataOutputStream
查看>>
DRF的分页
查看>>
Mysql 模糊匹配(字符串str中是否包含子字符串substr)
查看>>
python:open/文件操作
查看>>
流程控制 Day06
查看>>
Linux下安装Tomcat
查看>>
windows live writer 2012 0x80070643
查看>>
tomcat 和MySQL的安装
查看>>
git常用操作
查看>>
京东SSO单点登陆实现分析
查看>>
u-boot启动第一阶段
查看>>
MySQL批量SQL插入性能优化
查看>>
定义列属性:null,default,PK,auto_increment
查看>>
用户画像展示
查看>>
C#中StreamReader读取中文出现乱码
查看>>
使用BufferedReader的时候出现的问题
查看>>
linux安装图形界面
查看>>
博弈论之入门小结
查看>>
解决IE8下opacity属性失效问题,无法隐藏元素
查看>>