美文网首页
JS 中的 getter 和 setter

JS 中的 getter 和 setter

作者: Cherry丶小丸子 | 来源:发表于2022-04-26 14:56 被阅读0次

对象的属性是由属性名 key、值 value,和其他特性(可读写性 writable,可枚举性 enumerable,可配置性 configurable)组成的,从 ES5 开发,提供了 getter 和 setter 可以将属性值的获取和设置分别绑定到方法上,称之为“存取器”。有了 getter 和 setter 我们就能够在属性值的变更和获取时实现一些操作

存取器简单用法
// 直接在对象中创建属性的 getter 和 setter,并进行测试
let obj = {
    num: 50,
    get percent() {
        return this.num + "%"
    },
    set percent(value) {
        console.log("调用了 setter", this.num)
        this.num = value
    }
}
console.log(obj)            // { num: 50, percent: [Getter/Setter] }
console.log(obj.percent)    // 50%

obj.percent = 60            // "调用了 setter", 50
console.log(obj)            // { num: 60, percent: [Getter/Setter] }
console.log(obj.percent)    // 60%

注意语法规则,是通过get和set关键字创建的percent属性的getter和setter函数。get函数是没有参数的,set函数会将等号右边的值作为参数。setter 经常和 getter 连用以创建一个伪属性。不可能在具有真实值的属性上同时拥有一个 setter 器

使用 defineProperty 创建存取器
let obj = {
    num: 50
}
console.log(obj)    // { num: 50 }

Object.defineProperty(obj, 'percent', {
    configurable: true,
    enumerable: true,
    writable: true,
    // value: 40,
    get: function () {
        return this.num + "%"
    },
    set: function (value) {
        console.log('属性值更新:', value)
        this.num = value
    }
});
console.log(obj)    // { num: 50, percent: [Getter/Setter] }
obj.percent = 60    // 属性值更新: 60
console.log(obj)    // { num: 60, percent: [Getter/Setter] }
class中的存取器
class obj {
    constructor(number) {
        this.number = number
    }

    get percent() {
        return this.number + "%"
    }

    set percent(value) {
        console.log("值更新")
        this.number = value
    }
}
var object = new obj(10)

console.log(object)           // obj { number: 10 }
console.log(object.percent)   // 10%
object.number = 20            // 值更新
console.log(object.percent)   // 20%

相关文章

网友评论

      本文标题:JS 中的 getter 和 setter

      本文链接:https://www.haomeiwen.com/subject/zfacyrtx.html