随笔 - 750  文章 - 1  评论 - 107  阅读 - 34万

【转】[JavaScript] get 、set 的用法

转自:kimi.ai

在 JavaScript 中,getset 访问器(accessors)用于定义对象的属性,这些属性可以有 getter 和 setter 方法。getter 方法用于获取属性的值,而 setter 方法用于设置属性的值。使用 getset 可以在获取和设置属性时添加自定义逻辑,例如验证、格式化或计算等。以下是 getset 的详细用法:

基本语法

JavaScript复制
let obj = {
    _property: value, // 私有属性,通常以 _ 开头
    get property() {
        // 返回属性值的逻辑
        return this._property;
    },
    set property(value) {
        // 设置属性值的逻辑
        this._property = value;
    }
};

示例

  1. 基本用法:定义一个带有 getter 和 setter 的属性
JavaScript复制
let person = {
    _age: 30,
    get age() {
        return this._age;
    },
    set age(value) {
        if (value < 0) {
            console.log("年龄不能为负数");
        } else {
            this._age = value;
        }
    }
};

console.log(person.age); // 输出: 30
person.age = 35;
console.log(person.age); // 输出: 35
person.age = -5; // 输出: 年龄不能为负数
console.log(person.age); // 输出: 35
  1. 使用类定义 getter 和 setter
JavaScript复制
class Person {
    constructor(age) {
        this._age = age;
    }

    get age() {
        return this._age;
    }

    set age(value) {
        if (value < 0) {
            console.log("年龄不能为负数");
        } else {
            this._age = value;
        }
    }
}

let person = new Person(30);
console.log(person.age); // 输出: 30
person.age = 35;
console.log(person.age); // 输出: 35
person.age = -5; // 输出: 年龄不能为负数
console.log(person.age); // 输出: 35
  1. 计算属性值
JavaScript复制
let rectangle = {
    _width: 10,
    _height: 5,
    get area() {
        return this._width * this._height;
    },
    set width(value) {
        this._width = value;
    },
    set height(value) {
        this._height = value;
    }
};

console.log(rectangle.area); // 输出: 50
rectangle.width = 20;
rectangle.height = 10;
console.log(rectangle.area); // 输出: 200

注意事项

  • 私有属性:通常使用 _ 前缀来表示私有属性,这样可以避免直接访问和修改这些属性,而是通过 getter 和 setter 方法进行操作。
  • 验证和格式化:在 setter 方法中可以添加验证逻辑,确保设置的值是有效的。例如,可以检查年龄是否为负数、字符串是否符合特定格式等。
  • 计算属性:getter 方法可以用于计算属性值,而不是直接存储属性值。例如,area 属性是通过 widthheight 计算得到的。
  • 链式调用:getter 和 setter 方法可以链式调用,因为它们返回的是对象本身。但通常 getter 方法返回的是属性值,而不是对象本身。
  • 性能考虑:虽然 getter 和 setter 方法提供了灵活性,但它们可能会引入额外的性能开销。在性能敏感的应用中,需要谨慎使用。
通过使用 getset 访问器,可以更灵活地控制对象属性的访问和修改,同时添加必要的逻辑来确保数据的正确性和一致性。
posted on   z5337  阅读(106)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2023-01-17 【转】Git 报错:TLS certificate verification has been disabled!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示