引入 getter 和 setter
在 JavaScript 中,对象属性的访问和赋值是通过点符号或者方括号来完成的。然而,有时候我们希望在访问或修改属性时执行一些额外的操作,比如数据验证、计算等。为了满足这样的需求,JavaScript 提供了 getter 和 setter。
Getter
定义 getter
Getter 是一种特殊的函数,用于获取属性值。在定义类的时候,可以通过 get 关键字来定义一个 getter 方法。这个方法没有参数,返回值是属性的值。
// www.javascriptcn.com code example
class Person {
constructor(name) {
this._name = name;
}
get name() {
return this._name.toUpperCase();
}
}
const person = new Person('Alice');
console.log(person.name); // 输出 "ALICE"使用场景
Getter 可以用来实现属性的只读特性,或者在获取属性值时进行某些处理,如转换格式、过滤数据等。
Setter
定义 setter
Setter 是一种特殊的函数,用于设置属性值。通过 set 关键字可以定义一个 setter 方法。这个方法有一个参数,表示要设置的新值。
// www.javascriptcn.com code example
class Person {
constructor(name) {
this._name = name;
}
set name(newName) {
if (newName.length > 5) {
throw new Error('Name is too long');
}
this._name = newName;
}
}
const person = new Person('Bob');
person.name = 'Charlie'; // 正常设置
// person.name = 'ThisIsTooLong'; // 抛出错误:Name is too long使用场景
Setter 可以用来实现属性的只写特性,或者在设置属性值时进行某些处理,如数据验证、格式化等。
组合使用 getter 和 setter
示例
在实际应用中,getter 和 setter 往往会一起使用,以提供对私有属性的安全访问。
// www.javascriptcn.com code example
class Circle {
constructor(radius) {
this._radius = radius;
}
get radius() {
return this._radius;
}
set radius(newRadius) {
if (newRadius <= 0) {
throw new Error('Radius must be positive');
}
this._radius = newRadius;
}
get area() {
return Math.PI * this._radius ** 2;
}
}
const circle = new Circle(5);
console.log(circle.radius); // 输出 5
circle.radius = 10; // 设置新的半径
console.log(circle.area); // 输出 Math.PI * 100解释
在这个例子中,radius 属性有一个 getter 和一个 setter,确保半径始终为正数。area 是一个只读属性,通过 getter 方法计算得到。
总结
- Getter 和 setter 是用于控制对象属性访问和修改的特殊方法。
- Getter 没有参数,返回属性值;setter 接受一个参数,用于设置属性值。
- 可以通过组合使用 getter 和 setter 来实现对私有属性的安全访问和修改。
以上就是关于 JavaScript 类的 getter 和 setter 的详细介绍。希望这能帮助你在项目中更灵活地管理和操作对象属性。