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. setfacl 命令的常用用法

    setfacl命令----可以用来细分linux下的文件权限. chmod命令----可以把文件权限分为u,g,o三个组,而setfacl可以对每一个文件或目录设置更精确的文件权限. 换句话说,set ...

  2. flash 动画展示

  3. 【Azure IoT DevKit】实验终于做完了

    大家好,我是MSP李桑榆 今天终于把几个Azure IoT DevKit的小实验的视频给做完了. 不敢说什么指导,只是给大家一个参考.因为Devkit不需要你写一行代码,只需要你按着步骤来,并没有什么 ...

  4. c++我在努力----第三次作业体会

    [github地址](https://github.com/kobe96/object-oriented) 这次作业的三大难点 1.类的应用 从我们并没有接触过c++,到掌握如何写一个程序,多个类的引 ...

  5. 几个第三方yum源

    1.repoforge 官方网站:http://repoforge.org/ 2.epel http://fedoraproject.org/wiki/EPEL 3.Remi http://rpms. ...

  6. Java 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包)

    ava 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包) 假设现在要做一个通用的导入方法: 要求: 1.xml的只定义数据库表中的column字段,字段类型,是否非空等条件 ...

  7. nd.array.where

    http://mxnet.apache.org/api/python/ndarray/ndarray.html#mxnet.ndarray.where Return the elements, eit ...

  8. 【[NOI2018]屠龙勇士】

    发现好像都是化掉系数之后套上\(ExCrt\)的板子 这好像是一个真正的扩展扩展中国剩余定理 我们要处理的方程是这样的形式 \[c_ix\equiv b_i(mod\ a_i)\] 其中\(c\)用一 ...

  9. 如何利用java程序实现加密所需的公钥、密钥、数字证书

    本篇的主要目的在于实现pdf的数字签名问题,只是作为我学习知识的总结. 1.数字签名算法的概述 本部分主要参考于:https://blog.csdn.net/lovelichao12/article/ ...

  10. Android的JNI调用(二)

    Android Studio 2.3在native下已经有了代码提示功能,按照提示下载相应组件就可以debug native代码. 一.Java调用JNI与JNI调用Java 1.1 C调用Java ...