JavaScript 高级技巧:Getter/Setter 的妙用与实战

一、什么是getter和setter?

在JavaScript中,gettersetter是特殊的属性存取器(accessor properties),允许开发者通过函数控制对象属性的读取和赋值行为。它们并非直接操作属性值,而是通过“中间层”实现逻辑封装,使得代码更灵活且易于维护。

  • Getter:当读取属性时触发,无需加括号调用,例如 obj.prop
  • Setter:当赋值属性时触发,例如 obj.prop = value

二、 如何定义 Getter 和 Setter?

我们可以使用 Object.defineProperty() 方法或 ES6 的简洁语法来定义 getter 和 setter。以下是两种方法的示例:

使用 Object.defineProperty()
const person = {};

Object.defineProperty(person, 'name', {
    get: function() {
        return this._name;
    },
    set: function(value) {
        this._name = value;
    }
});

person.name = 'Alice'; // 调用 setter
console.log(person.name); // 调用 getter,输出 'Alice'
使用 ES6 简洁语法
class Person {
    constructor(name) {
        this._name = name;
    }

    get name() {
        return this._name;
    }

    set name(value) {
        this._name = value;
    }
}

const person = new Person('Bob');
person.name = 'Charlie'; // 调用 setter
console.log(person.name); // 调用 getter,输出 'Charlie'

三、为什么需要getter和setter?

1. 数据验证与安全性
通过setter可以在赋值前添加验证逻辑,防止非法数据污染对象。例如:

set age(value) {
  if (typeof value !== 'number' || value < 0) 
    throw Error("年龄必须是非负数!");
  this._age = value;
}

2. 封装与计算属性
Getter可以动态计算属性值,例如根据widthheight自动计算area

get area() {
  return this.width * this.height;
}

3. 懒加载:在访问某个属性时,可以延迟计算或加载数据。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容