在没有ES6 之前如果私有化一个类的属性是的确不易的。不能说ES5完全做不到但是确实是十分费力气的一件事
但是现在在ES6中有getter以及setter将使私有化变得十分容易
大家先看一下例子
let _age = 10;
class Animal{
constructor(type) {
this.type = type
}
get age () {
return _age;
}
set age (value) {
if (value < 12 && value > 10) {
_age = value
}
}
age () {
console.log(`${type}在吃饭`)
}
}
let dog = new Animal('小狗')
console.log(dog) // 这个时候一定只会输出一个属性那就是type
// 我们来看一下age
console.log(dog.age) // 这个时候是10
// 我们尝试修改它一下
dog.age = 100
console.log(dog.age )
// 结果我们发现age 并没有改变,这是为什么呢?
通过上面的例子。我们可以看出age的value并没有变为100
因为我们set age的时候加了一个判断条件 这个值必须为11的时候才可以被改变
换句话说这个者其实并不是dog实例中的age。而dog实例中的age 相当于一个入口。而真正意义上的值在_age上面。
还有一个问题为什么我不将age中的值写在this里面呢?
因为语法特性目前还不支持私有。只能以闭包的形式写在上面