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產生的值唯一,只在內部有局部變量存儲,達到只讀(反正我不知道這個東西與上面的實現有什麼區別,可能是我太笨了,哈哈哈)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章