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,无法调用。