JavaScript getter setter 怎么用

你有没有遇到过这种情况:想给对象的某个属性设置值时,得加一层判断,比如不能把年龄设成负数;或者想读取属性时,需要计算一下两个数的和再返回?这时候用普通的点语法就显得很麻烦,而JavaScript里的getter和setter,就是专门帮你解决这类问题的“小工具”,用法简单还接地气。

什么是getter和setter?

简单说,getter是“拿值的入口”,setter是“设值的出口”。你不用直接读写对象的属性,而是通过这两个方法来操作,中间还能加一些小规则——就像给家门装了门禁:只有输入正确密码(通过setter的判断)才能进门,拿快递(通过getter)也得走专门的取件口,不能直接翻窗户。

JavaScript getter setter 怎么用

举个生活化的例子:你有一个记账本对象,里面有个“总收入”属性,它不是固定的数字,而是靠工资、兼职收入加起来的。如果直接存成固定数值,哪天加了兼职收入,你得手动改总收入,很容易忘。这时候用getter就方便了:每次读总收入的时候,它会自动把工资和兼职收入加起来给你,不用你手动算。

怎么用getter?

getter的作用是“获取”属性值,写的时候要在方法前加get关键字,后面跟属性名(注意不用加括号),方法里返回你要的结果。

还是用记账本的例子,假设记账本有salary(工资)和sideIncome(兼职收入)两个属性,要做“自动算总收入”的getter:

`javascript

const book = {

salary: 5000,

sideIncome: 1000,

// 定义getter,属性名叫totalIncome

get totalIncome() {

return this.salary + this.sideIncome;

}

};

`

这时候你读book.totalIncome,不用调用方法,直接像属性一样用:console.log(book.totalIncome),结果就是6000,哪怕后来改了sideIncome,比如加200,再读一次就自动变成7000,完全不用手动更新。

怎么用setter?

setter的作用是“设置”属性值,方法前加set关键字,后面跟属性名,参数就是你要设置的值,方法里可以加判断逻辑。

比如你有一个记录年龄的属性,不能设成负数,也不能超过150(毕竟人的寿命有限),用setter就能加这个限制:

`javascript

const person = {

_age: 0, // 注意:这里属性名加了下划线,是约定俗成的“私有属性”,别直接用它

set age(newVal) {

// 加判断:新值得是0到150之间的整数

if (typeof newVal === 'number' && newVal >=0 && newVal <=150 && Number.isInteger(newVal)) {

this._age = newVal;

} else {

console.log('年龄输入不合法,只能是0-150之间的整数');

}

}

};

`

这时候你给age赋值,就会触发setter的判断:person.age = 25,没问题,内部_age变成25;要是你写person.age = -5,就会弹出提示,不会把错误的负数存进去,比普通赋值安全多了。

这里要注意,为什么用_age?因为如果把属性名直接叫age,setter的方法名也是age,就会出现“自己调用自己”的死循环——你给age赋值,就会触发setter,而setter又给this.age赋值,等于又触发setter,永远停不下来。加下划线是大家约定的“这个属性是内部用的,别直接碰”,就像便利店的收银台,外人只能走付款通道(setter),不能直接碰里面的钱(_age)。

实际用的时候要注意啥?

  • 不能同时用getter/setter和普通同名属性:比如你已经定义了totalIncome是普通属性,又写getter,会报错,因为两者是“冲突”的,就像一个门不能既是自动门又手动开门。
  • 按需使用:如果只是存固定值,没必要用getter/setter,不然反而麻烦,就像你只是买一瓶水,不用特意绕去专属通道,反而浪费时间。
  • getter不要做复杂操作:它是“拿值的入口”,只负责返回值就行,别在里面改别的属性,不然读个值还触发一堆操作,容易出bug,就像你取快递,取件口只负责给你快递,不能顺便把你的雨伞也拿走。

学会getter和setter,相当于给对象的属性加了“智能门禁”,既能简化代码,又能保证数据的合理性,写代码的时候多想想什么时候该用它,就能少踩很多数据错误的坑。

上一篇 Swift编程语言的核心特性与日常开发中的实用技巧科普