符号不能保证真正的隐私,但可用于分离对象的公共和内部属性。让我们举个例子,我们可以用它来拥有私有属性。Symbol
让我们举个例子,其中对象的属性不是私有的。
var Pet = (function() {
function Pet(type) {
this.type = type;
}
Pet.prototype.getType = function() {
return this.type;
}
return Pet;
}());
var a = new Pet('dog');
console.log(a.getType());//Output: dog
a.type = null;
//Modified outside
console.log(a.getType());//Output: null
在上面,类属性不是私有的。为了使其私有,我们必须创建一个闭包。下面的示例说明了如何使用闭包使私有。Pet
type
type
var Pet = (function() {
function Pet(type) {
this.getType = function(){
return type;
};
}
return Pet;
}());
var b = new Pet('dog');
console.log(b.getType());//dog
b.type = null;
//Stays private
console.log(b.getType());//dog
上述方法的缺点:我们为创建的每个实例引入了额外的闭包,这可能会损害性能。Pet
现在我们介绍.这可以帮助我们使属性私有,而无需使用额外的不必要的闭包。代码示例如下:Symbol
var Pet = (function() {
var typeSymbol = Symbol('type');
function Pet(type) {
this[typeSymbol] = type;
}
Pet.prototype.getType = function(){
return this[typeSymbol];
}
return Pet;
}());
var a = new Pet('dog');
console.log(a.getType());//Output: dog
a.type = null;
//Stays private
console.log(a.getType());//Output: dog