在没有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里面呢?
因为语法特性目前还不支持私有。只能以闭包的形式写在上面
评论一下?