初识Symbol
Symbol作用域
Symbol,是ES6语法中新增的,值是由Symbol函数调用产生的。
var s1 = Symbol();
console.log(s1); // Symbol
console.log(typeof s1); // Symbol
var s2 = Symbol('haha');
var s3 = Symobol('haha')
console.log(s2); // Symbol(haha)
console.log(s3); // Symbol(haha)
console.log( s2 === s3 ); // false
很多人都不清楚Symbol的用处,由上面的例子,在chrome浏览器当中,打印的值还是一样,但是s2不等于s3。
那么Symbol是干嘛的呢?
- 属性私有化
- 数据保护
假设
// 创建一个Person构造函数
function Person(name, gender) {
this.name = name;
this.gender = gender;
}
var p1 = new Person('张三', '男');
console.log(p1.gender); // 男
由上面的例子我们可以知道,如果我们new
对象p1
,赋值对应的name
和gender
即可。
但是!我们都知道,性别是不可随意改动的,除非变性手术。那么我们想一直保护gender
属性,让外部只能读取却不能改变呢?
聪明的人就想到了,可以作为一个私有属性。代码演示
// 创建一个Person构造函数
var Person = (function {
var _gender = '';
function P(name, gender) {
this.name = name;
_gender = gender;
}
return P;
// 利用prototype
P.prototype.getGender = functio() {
return _gender;
}
})();
// 创建一个Person对象
var p1 = new Person('张三', '男')
console.log(p1); // 张三
console.log(p1.gender); // undefined
console.log(p1.getGender()); // 男
以上是纯js实现私有变量的问题,学过java的可能更好理解上面的代码。
那么使用symbol
方式呢?
// 创建Person
var Person = (function {
var _gender = Symol('gender');
function P(name, gender) {
this.name = name;
this[_gender] = gender;
}
return P;
}
})();
// 创建一个Person对象
var p1 = new Person('张三', '男');
console.log(p1); //
初识Symbol的更多相关文章
- ES6初识-Symbol
Symbol的概念 变量是独一无二的 let a1=Symbol(); let a2=Symbol(); a1和a2严格意义不相等 let a3=Symbol.for('a3'); let a4=Sy ...
- IOS之UI -- UITableView -- 1 -- 相关初识
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- 初识DSP
初识DSP 1.TI DSP的选型主要考虑处理速度.功耗.程序存储器和数据存储器的容量.片内的资源,如定时器的数量.I/O口数量.中断数量.DMA通道数等.DSP的主要供应商有TI,ADI,Motor ...
- 前端之CSS初识
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
- Android动画效果之初识Property Animation(属性动画)
前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...
- 初识Hadoop
第一部分: 初识Hadoop 一. 谁说大象不能跳舞 业务数据越来越多,用关系型数据库来存储和处理数据越来越感觉吃力,一个查询或者一个导出,要执行很长 ...
- python学习笔记(基础四:模块初识、pyc和PyCodeObject是什么)
一.模块初识(一) 模块,也叫库.库有标准库第三方库. 注意事项:文件名不能和导入的模块名相同 1. sys模块 import sys print(sys.path) #打印环境变量 print(sy ...
- 初识IOS,Label控件的应用。
初识IOS,Label控件的应用. // // ViewController.m // Gua.test // // Created by 郭美男 on 16/5/31. // Copyright © ...
- UI篇(初识君面)
我们的APP要想吸引用户,就要把UI(脸蛋)搞漂亮一点.毕竟好的外貌是增进人际关系的第一步,我们程序员看到一个APP时,第一眼就是看这个软件的功能,不去关心界面是否漂亮,看到好的程序会说"我 ...
随机推荐
- c#listbox使用详解和常见问题解决
关于ListBox ListBox是WinForm中的 列表 控件,它提供了一个项目列表(一组数据项),用户可以选择一个或者多个条目,当列表项目过多时,ListBox会自动添加滚动条,使用户可以滚动查 ...
- ZT android -- 蓝牙 bluetooth (一) 入门
android -- 蓝牙 bluetooth (一) 入门 分类: Android的原生应用分析 2013-05-19 21:44 4543人阅读 评论(37) 收藏 举报 bluetooth4.2 ...
- mysql install steps
the official documents for mysql 5.6 install key steps: # Preconfiguration setup shell> groupadd ...
- Io性能分析
一.iostat使用说明 1.命令使用方法 使用ixstat –x 1 可以每隔1秒钟采集所有设备的io信息.其中的1类似于使用“vmstat 1”后面的1. 2.命令格式说明 ―――――――――― ...
- mongd配置文件解释
mongd配置文件解释 系统日志配置 systemLog: verbosity: <int> quiet: <boolean> traceAllExceptions: < ...
- BZOJ5072:[Lydsy1710月赛]小A的树(树形DP)
Description BZOJ只是扔了个下载链接 Solution 设$f[x][i]$表示$x$点选中$i$个黑点的最小连通块. 设$g[x][i]$表示$x$点选中$i$个黑点的最大连通块. 转 ...
- Hadoop学习之路(二十二)MapReduce的输入和输出
MapReduce的输入 作为一个会编写MR程序的人来说,知道map方法的参数是默认的数据读取组件读取到的一行数据 1.是谁在读取? 是谁在调用这个map方法? 查看源码Mapper.java知道是r ...
- 【BBS】BBS论坛项目各个页面的工作流程图
1论坛整体结构 2数据库结构 3登录页面 4论坛首页(显示各个板块) 5显示板块对应的内容 6文章内容页 7新增板块.发表文章.回复 8版面管理.用户管理.发帖排行
- idea 和 maven学习
创建maven项目:http://www.cnblogs.com/wql025/p/5215570.html
- EF Core 2.0中如何手动映射数据库的视图为实体
由于Scaffold-DbContext指令目前还不支持自动映射数据库中的视图为实体,所以当我们想使用EF Core来读取数据库视图数据的时候,我们需要手动去做映射,本文介绍如何在EF Core中手动 ...