getter函数和setter函数

489 阅读2分钟

getter函数和setter函数

  • 在 JavaScript 中,getter 函数和 setter 函数是访问器属性的一部分,用于定义属性的读取和赋值操作。它们允许你在获取或设置属性值时执行自定义的逻辑。
  • Getter 函数和 Setter 函数可以通过属性描述符中的 getset 属性来定义。

以下是关于 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); // 调用 getter 函数,输出: Getting name,undefined
obj.name = 'John'; // 调用 setter 函数,输出: Setting name
console.log(obj.name); // 调用 getter 函数,输出: Getting name,'John'

  • 在上述示例中,我们定义了一个名为 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; // 设置 radius 属性值,调用 setter 函数
console.log(obj.radius); // 获取 radius 属性值,调用 getter 函数,输出: 5

obj.radius = -2; // 设置 radius 属性值,调用 setter 函数,输出: '半径不能为负数'
console.log(obj.radius); // 获取 radius 属性值,调用 getter 函数,输出: 5(值未改变)

  • 在上述示例中,我们定义了一个 obj 对象,其中包含了 radius 属性和相应的 getter 函数和 setter 函数。getter 函数用于获取 _radius 属性的值,setter 函数用于设置 _radius 属性的值。在设置 radius 属性值时,通过 setter 函数进行验证,确保半径值不为负数。通过 getter 函数获取 radius 属性值时,会返回 _radius 的值。