You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中getter和setter方法有什么作用?相关下划线命名是什么含义?

JavaScript getter/setter 相关问题解答

一、getter/setter 的具体功能

getter 是用 get 关键字定义的方法,作用是在读取对象属性时自动触发,返回自定义的计算结果,不需要主动调用方法,直接像读取普通属性一样使用即可。
setter 是用 set 关键字定义的方法,作用是在给对象属性赋值时自动触发,可以对要赋的值做校验、预处理后再存储,同样支持直接像给普通属性赋值一样使用,无需主动调用方法。

参考示例代码:

const person = {
  // 内部存储实际值的属性
  _age: 0,
  // 读取age属性时自动触发该getter
  get age() {
    return this._age
  },
  // 给age属性赋值时自动触发该setter
  set age(value) {
    // 赋值前做合法性校验
    if (value < 0 || value > 120) {
      throw new Error('年龄取值不合法')
    }
    this._age = value
  }
}

person.age = 25 // 自动触发setter,校验通过后赋值
console.log(person.age) // 自动触发getter,输出25
person.age = 150 // 自动触发setter,校验不通过抛出错误

二、getter/setter 的使用优势

  • 封装内部逻辑,对外暴露更简洁的属性调用方式,不需要用户主动调用 getXxx()/setXxx() 这类方法,符合普通属性的读写习惯
  • 可在属性读写时自动插入自定义逻辑:比如赋值前做合法性校验、读取时做动态计算、修改属性时自动触发关联更新(比如修改了宽度参数,自动同步更新DOM元素的宽度样式)
  • 灵活控制属性的读写权限:只定义getter不定义setter,即可实现只读属性,避免外部意外篡改内部状态
  • 兼容性好:如果后续需要给原本的普通属性增加读写逻辑,改成getter/setter之后,外部的调用代码不需要做任何修改,不会出现兼容性问题

三、下划线前缀命名的含义

这是JS开发者约定俗成的命名规范,不属于语法强制要求的规则。
因为getter/setter需要对外暴露一个和内部存储属性不同的名称,比如对外暴露age,内部实际存值的属性就加下划线命名为_age,用来提示所有开发者:这个属性是对象的内部私有属性,不要直接在对象外部读写该属性,应该通过对外暴露的getter/setter操作。
目前ES6+已经推出原生私有属性语法(用#开头的属性),但下划线命名的方式因为兼容性好、写法简单,仍然被广泛使用。

内容的提问来源于stack exchange,提问作者Shyan Akarsha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 14:27:03