世外云

javascript getter setter

在JavaScript中,getters和setters是一种特殊的方法,用于访问和修改对象的属性,它们允许我们在获取或设置属性值时执行一些额外的逻辑,例如验证、格式化或其他操作,getters和setters的主要优点是它们提供了一种封装对象属性的方式,使得我们可以更好地控制对属性的访问和修改。

javascript getter setter-图1

## getters

getters是一种特殊类型的方法,用于获取对象的属性值,与普通的方法不同,getters不需要传递参数,并且可以通过点符号(.)或方括号([])来调用,getters的名称应该以"get"开头,后面跟着要访问的属性名。

下面是一个简单的示例,演示如何使用getters:

class Person {
  constructor(name, age) {
    this._name = name;
    this._age = age;
  }

  // Getter for name property
  get name() {
    return this._name;
  }

  // Getter for age property
  get age() {
    return this._age;
  }
}

const person = new Person("John", 25);
console.log(person.name); // Output: John
console.log(person.age); // Output: 25

在上面的示例中,我们定义了一个Person类,它具有两个私有属性`_name`和`_age`,通过使用getters,我们可以访问这些私有属性的值,而无需直接访问它们,当我们调用`person.name`或`person.age`时,getter方法会被调用,并返回相应的属性值。

## setters

setters是另一种特殊类型的方法,用于设置对象的属性值,与getters类似,setters也不需要传递参数,并且可以通过点符号(.)或方括号([])来调用,setters的名称应该以"set"开头,后面跟着要访问的属性名。

下面是一个简单的示例,演示如何使用setters:

class Person {
  constructor(name, age) {
    this._name = name;
    this._age = age;
  }

  // Setter for name property
  set name(value) {
    if (typeof value !== "string") {
      throw new Error("Name must be a string");
    }
    this._name = value;
  }

  // Setter for age property
  set age(value) {
    if (typeof value !== "number") {
      throw new Error("Age must be a number");
    }
    this._age = value;
  }
}

const person = new Person("John", 25);
person.name = "Jane"; // Valid assignment, no error will be thrown
person.age = 30; // Valid assignment, no error will be thrown
console.log(person.name); // Output: Jane
console.log(person.age); // Output: 30

在上面的示例中,我们为Person类的`name`和`age`属性定义了setters,当尝试设置这些属性的值时,setter方法会被调用,在setter方法中,我们可以执行一些验证逻辑,以确保属性的值符合预期的类型或格式,如果验证失败,我们可以抛出一个错误来阻止赋值操作,在上面的示例中,我们检查了`name`是否为字符串,以及`age`是否为数字,如果验证通过,我们将属性的值设置为传入的值,我们抛出一个错误。

## 问题与解答栏目:JavaScript中使用getters和setters的问题与解答

1. Q: 我可以在getter或setter方法中添加逻辑吗?如果可以,我应该在哪里添加它?A: 是的,你可以在getter或setter方法中添加逻辑,我们会在setter方法中添加逻辑来验证或处理属性的值,在上面的示例中,我们在setter方法中检查了`name`是否为字符串,以及`age`是否为数字,你也可以在getter方法中添加逻辑来处理属性的值,例如格式化或转换数据,无论在哪种情况下,都应该确保添加的逻辑不会破坏对象的基本功能或违反其设计原则。

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
请登录后评论...
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~