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,赋值对应的namegender即可。

但是!我们都知道,性别是不可随意改动的,除非变性手术。那么我们想一直保护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的更多相关文章

  1. ES6初识-Symbol

    Symbol的概念 变量是独一无二的 let a1=Symbol(); let a2=Symbol(); a1和a2严格意义不相等 let a3=Symbol.for('a3'); let a4=Sy ...

  2. IOS之UI -- UITableView -- 1 -- 相关初识

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  3. 初识DSP

    初识DSP 1.TI DSP的选型主要考虑处理速度.功耗.程序存储器和数据存储器的容量.片内的资源,如定时器的数量.I/O口数量.中断数量.DMA通道数等.DSP的主要供应商有TI,ADI,Motor ...

  4. 前端之CSS初识

    figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...

  5. Android动画效果之初识Property Animation(属性动画)

    前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...

  6. 初识Hadoop

    第一部分:              初识Hadoop 一.             谁说大象不能跳舞 业务数据越来越多,用关系型数据库来存储和处理数据越来越感觉吃力,一个查询或者一个导出,要执行很长 ...

  7. python学习笔记(基础四:模块初识、pyc和PyCodeObject是什么)

    一.模块初识(一) 模块,也叫库.库有标准库第三方库. 注意事项:文件名不能和导入的模块名相同 1. sys模块 import sys print(sys.path) #打印环境变量 print(sy ...

  8. 初识IOS,Label控件的应用。

    初识IOS,Label控件的应用. // // ViewController.m // Gua.test // // Created by 郭美男 on 16/5/31. // Copyright © ...

  9. UI篇(初识君面)

    我们的APP要想吸引用户,就要把UI(脸蛋)搞漂亮一点.毕竟好的外貌是增进人际关系的第一步,我们程序员看到一个APP时,第一眼就是看这个软件的功能,不去关心界面是否漂亮,看到好的程序会说"我 ...

随机推荐

  1. BZOJ 1050 旅行comf 并查集+枚举下界

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1050 题目大意: 给你一个无向图,N(N<=500)个顶点, M(M<=5 ...

  2. Java虚拟机11:内存分配原则

    前言 JVM的自动内存管理要自动化的解决两个问题:对象分配内存以及回收分配给对象的内存.对象的内存分配一般是指在堆上分配,少数情况下也可能会直接分配在老年代上,对象主要分配在新生代的Eden 区上,如 ...

  3. iOS-建设银行破解分享

    https://i.cnblogs.com/Files.aspx 建设银行破解分享 问题描述一• 在越狱手机上控制银行客户端自动获取流水,并发送到服务器. 问题描述二• 怎么控制 • 通过在越狱手机上 ...

  4. canvas二三事之签名板与视频绘制

    今天,不知道怎么的就点开了语雀,然后就看到了<HTML5 Canvas 教程>,开始了canvas的研究(学习)之旅. 首先,想到的第一个东西就是签名板,上代码: <canvas i ...

  5. No.1 - 制作一个简单的菜单动画效果---百度IFE

    最近比较闲,在家做点训练 http://ife.baidu.com/course/detail/id/18?t=1527144851578#learn CSS3新特性,兼容性,兼容方法总结 https ...

  6. linux内核中网络文件系统的注册初始化

    针对内核3.9 系统开启时,会使用init/main.c,然后再里面调用kernel_init(),在里面会再调用do_basic_setup(),调用do_initcalls(),调用do_one_ ...

  7. JNI由浅入深_6_简单对象的应用

    1.声明native方法 public class ComplexObject { /** * 返回一个对象数组 * @param val * @return */ public native Per ...

  8. UVA - 11987 Almost Union-Find(带删除的并查集)

    I hope you know the beautiful Union-Find structure. In this problem, you’re to implement something s ...

  9. ACM-SG函数之S-Nim——hdu1536 hdu1944 poj2960

    S-Nim Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  10. activiti获取到流程图节点信息之任务节点

    //获取bpmnModel对象 BpmnModel model1 = new BpmnJsonConverter().convertToBpmnModel(modelNode); //由于我们这里仅仅 ...