关于JavaScript中的getter和setter

2019-11-5 张宇童 学习日志

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

标签: javascript ES6

发表评论:

Powered by emlog