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

转自:kimi.com

在 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 访问器,可以更灵活地控制对象属性的访问和修改,同时添加必要的逻辑来确保数据的正确性和一致性。