初识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时,第一眼就是看这个软件的功能,不去关心界面是否漂亮,看到好的程序会说"我 ...
随机推荐
- Tomcat服务时区设置
tomcat服务不设置时间,会自动取系统时间,根据项目部署服务器位置不同时间会有差别,统一设置tomcat服务集群时间为东八区时间,具体设置如下: 在tomcat目录的bin文件夹下,找到文件cata ...
- Mac OS Yosemite(10.10.3)系统下环境配置
/etc/bash_profile #Java export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_65.jdk/Contents/ ...
- AngularJs学习笔记--Using $location
原版地址:http://code.angularjs.org/1.0.2/docs/guide/dev_guide.services.$location 一.What does it do? $loc ...
- Appium基础篇(一)——启动emulator
1. Appium API文档:链接参考 http://appium.io/slate/cn/v/?ruby#appium-介绍. 2. Appium 安装篇:http://www.cnblogs.c ...
- 【Linuc-CentOS 】通过yum安装 指定版本的nodejs
原 [Linuc-CentOS ]通过yum安装 指定版本的nodejs 2018年06月21日 06:56:32 黑夜的风 阅读数:884 版权声明:本文为博主原创文章,未经博主允许不得转载. ...
- [LuoguP3668][USACO17OPEN]现代艺术2
[LuoguP3668][USACO17OPEN]Modern Art2(Link) 现在你有一块长为\(N\)的画布,每次可以选择一段连续的区间进行颜色填涂,新颜色会覆盖旧颜色.每一次填涂都要耗费一 ...
- EF Core 2.1 Raw SQL Queries (转自MSDN)
Entity Framework Core allows you to drop down to raw SQL queries when working with a relational data ...
- javascript之promise
js语言的执行环境是"单线程",即一次只能执行一个任务,如果有多个任务的话,就需要排队,只有前面的一个任务执行结束了,再执行后面的一个任务.于是异步执行就变得非常重要,异步执行之后 ...
- python制作验证码
from PIL import Image, ImageFont, ImageDraw, ImageFilterfrom random import choice, randint # 随即配置颜色d ...
- WebGl 二维纹理贴图(矩形)
效果: 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...