getter函数和setter函数
- 在 JavaScript 中,getter 函数和 setter 函数是访问器属性的一部分,用于定义属性的读取和赋值操作。它们允许你在获取或设置属性值时执行自定义的逻辑。
- Getter 函数和 Setter 函数可以通过属性描述符中的
get 和 set 属性来定义。
以下是关于 getter 函数和 setter 函数的说明:
- Getter 函数(get):用于获取属性的值。当访问属性时,getter 函数会被调用,并返回相应的值。getter 函数不接受任何参数,但可以使用
this 关键字来引用当前对象。
- Setter 函数(set):用于设置属性的值。当给属性赋值时,setter 函数会被调用,传入新的值作为参数。setter 函数可以执行一些逻辑,例如验证输入值的有效性或触发其他操作。
示例1:
const obj = {
_name: '',
get name() {
console.log('Getting name');
return this._name;
},
set name(value) {
console.log('Setting name');
this._name = value;
}
};
console.log(obj.name);
obj.name = 'John';
console.log(obj.name);
- 在上述示例中,我们定义了一个名为
name 的访问器属性,其中包含 getter 函数和 setter 函数。当通过 obj.name 获取属性值时,会调用 getter 函数,并输出 'Getting name'。当给 obj.name 赋值时,会调用 setter 函数,并输出 'Setting name'。通过使用 getter 和 setter 函数,我们可以在访问或设置属性时执行自定义的逻辑。
- 请注意,为了避免与属性本身的存储冲突,通常在 getter 和 setter 函数内部使用一个私有变量(如上例中的
_name)来存储属性的实际值。
示例2(计算属性):
jsconst obj = {
_radius: 0,
get radius() {
return this._radius
},
set radius(value) {
if (value >= 0) {
this._radius = value
} else {
console.log('半径不能为负数')
}
}
}
obj.radius = 5
console.log(obj.radius)
obj.radius = -2
console.log(obj.radius)
- 在上述示例中,我们定义了一个
obj 对象,其中包含了 radius 属性和相应的 getter 函数和 setter 函数。getter 函数用于获取 _radius 属性的值,setter 函数用于设置 _radius 属性的值。在设置 radius 属性值时,通过 setter 函数进行验证,确保半径值不为负数。通过 getter 函数获取 radius 属性值时,会返回 _radius 的值。