ES6 Symbol

Symbol

ES6新增的数据类型 - 基本类型

值是由 Symbol 函数调用产生的


var s1 = Symbol();
var s2 = Symbol();
console.log( typeof s1 ); // symbol
console.log(s1, s2); // Symbol() Symbol()
var s3 = Symbol('miaov');
var s4 = Symbol('miaov');
console.log(s3, s4); // Symbol(miaov) Symbol(miaov)
console.log( s3 == s4 ); // false

由上面的代码可以看出symbol产生的是一个唯一值,即使传入的参数一致,产生的值也是不同的。

用处

  • 属性私有化 - 数据保护

例如:我希望一个Person的性别在出生以后就能够被确定,并一直保存到死

  1. 不使用symbol
var Person = (function() {
    var _gender = '';
    function P(name, gender) {
        this.name = name;
        _gender = gender;
    }
    P.prototype.getGender = function() {
        return _gender;
    }
    return P;
})();

var p1 = new Person('莫涛', '男');
console.log(p1); // P {name: "莫涛"}
console.log(p1.getGender()); // 

私有化属性的方法就是不将属性直接定义在this对象上,而是放到整个函数的局部变量中

  1. symbol
var Person = (function() {
    let _gender = Symbol('gender');
    function P(name, gender) {
        this.name = name;
        this[_gender] = gender;
    }
    P.prototype.say = function() {
        console.log(this[_gender]);
    }
    return P;
})();

var p1 = new Person('莫涛', '男');
console.log(p1); //P {name: "莫涛", Symbol(gender): "男"}
console.log(p1[Symbol('gender')]) //undefined

通过symbol产生的值唯一,只在内部有局部变量存储,达到只读(反正我不知道这个东西与上面的实现有什么区别,可能是我太笨了,哈哈哈)

posted @ 2018-11-16 10:09  十年雪落  阅读(440)  评论(0编辑  收藏  举报