【转】[JavaScript] get 、set 的用法
转自:kimi.ai
在 JavaScript 中,
get
和 set
访问器(accessors)用于定义对象的属性,这些属性可以有 getter 和 setter 方法。getter 方法用于获取属性的值,而 setter 方法用于设置属性的值。使用 get
和 set
可以在获取和设置属性时添加自定义逻辑,例如验证、格式化或计算等。以下是 get
和 set
的详细用法:基本语法
JavaScript复制
let obj = {
_property: value, // 私有属性,通常以 _ 开头
get property() {
// 返回属性值的逻辑
return this._property;
},
set property(value) {
// 设置属性值的逻辑
this._property = value;
}
};
示例
-
基本用法:定义一个带有 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
-
使用类定义 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
-
计算属性值
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
属性是通过width
和height
计算得到的。 -
链式调用:getter 和 setter 方法可以链式调用,因为它们返回的是对象本身。但通常 getter 方法返回的是属性值,而不是对象本身。
-
性能考虑:虽然 getter 和 setter 方法提供了灵活性,但它们可能会引入额外的性能开销。在性能敏感的应用中,需要谨慎使用。
通过使用
get
和 set
访问器,可以更灵活地控制对象属性的访问和修改,同时添加必要的逻辑来确保数据的正确性和一致性。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有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!