📜  javascript 类 getter setter - Javascript (1)

📅  最后修改于: 2023-12-03 15:16:15.093000             🧑  作者: Mango

JavaScript 类的 getter 和 setter

在面向对象编程中,getter 和 setter 是两个重要的概念。它们可以让我们控制某个属性的访问和修改,并在代码中实现更高级别的逻辑。在 JavaScript 中,我们通过定义 getter 和 setter 方法来实现这些功能。

定义 getter 和 setter 方法

在 JavaScript 中,我们可以使用 Object.defineProperty() 方法来定义 getter 和 setter 方法。下面是一个简单的例子:

class Person {
  constructor(name) {
    this._name = name; // 注意这里使用的是私有属性 _name
  }

  // 定义 name 的 getter 方法
  get name() {
    return this._name;
  }

  // 定义 name 的 setter 方法
  set name(name) {
    if (name.length < 4) {
      console.log("名字长度应该大于 4 !");
      return;
    }
    this._name = name;
  }
}

const person = new Person("张三");
console.log(person.name); // 输出 "张三"

person.name = "李四";
console.log(person.name); // 输出 "李四"

person.name = "小"; // 输出 "名字长度应该大于 4 !"

在上面的例子中,我们使用 get name()set name() 方法来分别定义 name 属性的 getter 和 setter 方法。注意,在 getter 和 setter 方法的名称上,我们省略了 getset 关键字,直接使用了属性名。

使用 getter 和 setter 方法

使用 getter 和 setter 方法和普通属性类似。然而,由于 getter 和 setter 方法是实际处理属性值的方法,因此我们实际上是在调用方法而不是直接访问属性。

class Person {
  constructor(name) {
    this._name = name; // 注意这里使用的是私有属性 _name
  }

  // 定义 name 的 getter 方法
  get name() {
    return this._name;
  }

  // 定义 name 的 setter 方法
  set name(name) {
    if (name.length < 4) {
      console.log("名字长度应该大于 4 !");
      return;
    }
    this._name = name;
  }
}

const person = new Person("张三");

console.log(person.name); // 调用 name 的 getter 方法
person.name = "李四"; // 调用 name 的 setter 方法
console.log(person.name); // 调用 name 的 getter 方法

在上面的例子中,我们通过调用 person.nameperson.name = "李四" 方法来分别调用 name 的 getter 和 setter 方法。

总结

在 JavaScript 中,我们可以使用 getset 关键字来定义类的 getter 和 setter 方法。通过这些方法,我们可以控制属性的访问和修改,并在代码中实现更高级别的逻辑。同时,由于我们实际上是在调用方法而不是直接访问属性,因此使用 getter 和 setter 方法时,我们应该注意方法的名称和使用方式。