JS Symbol的使用

Symbol:ES6新增的數據類型 - 基本類型

值是由Symbol函數調用產生的。

var s1 = Symbol();
var s2 = Symbol();
var s3 = Symbol('miaov');
var s4 = Symbol('miaov');

console.log(s1, s2);
console.log(s3 == s4);

結果爲:

Symbol() Symbol()
false

Symbol的值都是唯一的。

屬性私有化 - 數據保護

function Person(name, gender) {
    this.name = name;
    this.gender = gender;
}
  
var p1 = new Person('淺殤', '女');
console.log(p1.gender)

結果爲:

另一個匿名函數例子:

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)
console.log(p1.getGender())

結果爲:

P {name: "淺殤"}

函數外無法直接調用函數內的_gender,但是可以通過getGender函數return。

var Person = (function () {
    let _gender = Symbol('gender');

    function P(name, gender) {
        this.name = name;
        this[_gender] = gender;
    };
    return P;
})();

var p1 = new Person('淺殤', '女');
console.log(p1)
console.log(p1[Symbol('gender')])

結果爲:

P {name: "淺殤", Symbol(gender): "男"}
undefined

Symbol的值只有唯一一個就算樣子一樣也不是原來的那一個Symbol,無法調用。

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