初识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时,第一眼就是看这个软件的功能,不去关心界面是否漂亮,看到好的程序会说"我 ...
随机推荐
- 51nod 1403 有趣的堆栈
题目看这里 主要是能分析出这样一个结论: 每个pop根据这个元素上面被压过多少个元素,可以知道他是在前面哪个pop之前被push的. 根据这些信息可以求得每个pop到上一个pop之间有多少个push, ...
- 关于$.fn.scrollPath is not a function
关于$.fn.scrollPath is not a function 在做项目过程中,用到了一个jQuery的滚动路径插件——jQuery Scroll Path.引入相关的js文件后,但是控制台一 ...
- IDEA 常用插件收藏
1.maven helper 查看maven依赖,解决jar包冲突. 2.Alibaba Java Coding Guidelines 代码风格遵循阿里java规范. 3.Lombok 简化实体中的 ...
- Java虚拟机11:内存分配原则
前言 JVM的自动内存管理要自动化的解决两个问题:对象分配内存以及回收分配给对象的内存.对象的内存分配一般是指在堆上分配,少数情况下也可能会直接分配在老年代上,对象主要分配在新生代的Eden 区上,如 ...
- 随手练——HDU Safe Or Unsafe (小根堆解决哈夫曼问题)
HDU 2527 :http://acm.hdu.edu.cn/showproblem.php?pid=2527 哈夫曼树,学完就忘得差不多了,题目的意思都没看懂,有时间复习下,看了别人的才知道是怎么 ...
- 【Autoprefixer】Hbuilder中配置Autoprefixer
1.安装node.js 2.安装Autoprefixer 3.安装postcss-cli 4.配置外部工具 打开HBuilder,运行-外部工具-外部工具配置,如图: 新建一个外部工具配置 名称填写a ...
- 进入WinRe(windows恢复环境)
放个预览图: 方法汇总: 1. 2 . +Shift 3 ”shutdown /r /o“ 或 "bootim" 4 5 启动中强制关闭3次以上 6 狂按F8 (不同的电脑操作不 ...
- 一分钟掌握Spring中bean的生命周期!
Spring 中bean 的生命周期短暂吗? 在spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean 的别名只能维持 ...
- virtualbox+vagrant学习-5-Boxes-2-Box Versioning
Box Versioning 从Vagrant 1.5版本开始, box支持版本控制.这允许创建box的人将更新推送到box中,使用box的人有一个简单的工作流,用于检查更新.更新box以及查看发生了 ...
- xgboost和gbdt区别
1. xgboost在目标函数中加入了正则化项,当正则化项为0时与传统的GDBT的目标函数相同2. xgboost在迭代优化的时候使用了目标函数的泰勒展开的二阶近似,paper中说能加快优化的过程!! ...