使用属性 getter/setter 实现属性值校验

在前端开发中,我们常常需要对属性值进行校验,以确保数据的正确性和安全性。在 JavaScript 中,我们可以使用属性的 getter 和 setter 方法来实现属性值的校验。

getter 和 setter 方法

在 JavaScript 中,我们可以使用 getter 和 setter 方法来访问和修改对象的属性。getter 方法用于获取属性值,而 setter 方法用于设置属性值。这两个方法都是属性的一部分,可以像访问普通属性一样使用。例如:

let obj = {
  _name: 'John',
  get name() {
    return this._name;
  },
  set name(value) {
    this._name = value;
  }
};

console.log(obj.name); // "John"
obj.name = "Jane";
console.log(obj.name); // "Jane"

在上面的代码中,我们定义了一个对象 obj,它有一个属性 _name 和两个方法 get name()set name(value)。这两个方法分别用于获取和设置 _name 属性的值。注意,_name 属性前面加了一个下划线,这是一种常见的命名约定,用于表示这个属性是私有的,不应该被直接访问。

使用 getter 和 setter 实现属性值校验

使用 getter 和 setter 方法可以方便地实现属性值的校验。我们可以在 setter 方法中添加一些校验逻辑,以确保属性值符合我们的要求。例如:

let obj = {
  _age: 0,
  get age() {
    return this._age;
  },
  set age(value) {
    if (value < 0 || value > 120) {
      throw new Error('Invalid age');
    }
    this._age = value;
  }
};

obj.age = 18; // OK
console.log(obj.age); // 18

obj.age = -1; // Error: Invalid age

在上面的代码中,我们定义了一个对象 obj,它有一个属性 _age 和一个方法 set age(value)。在 set age(value) 方法中,我们添加了一些校验逻辑,如果属性值小于 0 或大于 120,就抛出一个错误。这样,当我们尝试设置不合法的属性值时,就会抛出一个错误。

示例代码

下面是一个完整的示例代码,演示了如何使用属性 getter 和 setter 实现属性值校验:

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

  get name() {
    return this._name;
  }

  set name(value) {
    if (!value) {
      throw new Error('Name is required');
    }
    this._name = value;
  }

  get age() {
    return this._age;
  }

  set age(value) {
    if (value < 0 || value > 120) {
      throw new Error('Invalid age');
    }
    this._age = value;
  }
}

let person = new Person('John', 18);
console.log(person.name); // "John"
console.log(person.age); // 18

person.name = '';
// Error: Name is required

person.age = -1;
// Error: Invalid age

在上面的代码中,我们定义了一个 Person 类,它有两个属性 nameage,以及两个方法 get name()set name(value)get age()set age(value)。在 set name(value)set age(value) 方法中,我们分别添加了一些校验逻辑,以确保属性值符合要求。

总结

使用属性 getter 和 setter 方法可以方便地实现属性值的校验,以确保数据的正确性和安全性。在实际开发中,我们可以根据具体需求,添加不同的校验逻辑,以满足不同的业务需求。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65bcd0eeadd4f0e0ff60da0f