我的位置:首页 > 前端>初识Symbol

初识Symbol

时间:2019-01-10 16:40:34 来源:互联网 作者: 神秘的大神 字体:

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); //