Menu
CoddyTech

get 和 set 关键字

本课属于 Coddy JavaScript 学习旅程的“面向对象编程”单元。第 43 课,共 56 课。

Getter 和 setter 是特殊方法,看起来像属性,但实际上是函数。它们让你能够控制属性的访问和修改方式。

让我们创建一个简单的 Person 类:

class Person {
  constructor(firstName, lastName) {
    this._firstName = firstName;
    this._lastName = lastName;
  }
  
  // fullName 的 getter
  get fullName() {
    return `${this._firstName} ${this._lastName}`;
  }
  
  // fullName 的 setter
  set fullName(value) {
    const parts = value.split(' ');
    this._firstName = parts[0];
    this._lastName = parts[1];
  }
}

_firstName 和 _lastName 中的下划线是一种命名约定:它告诉其他开发者,这些属性是内部属性,应该通过 getter 和 setter 读取和修改,而不是直接操作。JavaScript 不会强制执行这一约定。

现在我们可以像使用属性一样使用这些 getter 和 setter:

// 创建一个新的 Person 对象
const person = new Person('John', 'Doe');

// 使用 getter
console.log(person.fullName); // 输出:John Doe

// 使用 setter
person.fullName = 'Jane Smith';

// setter 已更新内部属性
console.log(person.fullName); // 输出:Jane Smith

请注意,调用这些方法时不加括号。它们的行为和属性一样,但在访问或修改时会执行代码。

challenge icon

挑战

给你一个带有 User 类和 age 属性。你的任务是为 age 添加获取器和设置器,要求如下:

  1. 获取器 get age():返回存储的年龄
  2. 设置器 set age(newAge):验证年龄是否在 0 到 120 之间
    • 如果有效(0-120):将其存储在 this._age 中
    • 如果无效:不更改它,并记录 "Invalid age!"

亲手试试

import { User } from './user.js';

// 测试代码,请勿修改
const user = new User("Alice", 25);
console.log(user.age);      // 应输出 25

user.age = 30;
console.log(user.age);      // 应输出 30

user.age = 150;             // 应显示 "Invalid age!"
console.log(user.age);      // 仍应输出 30(保持不变)

quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

面向对象编程中的所有课

自己练习: JavaScript 在线编译器