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,無法調用。