把get讲的详细一点
时间: 2024-02-18 14:04:08 浏览: 21
在 TypeScript 或 JavaScript 中,属性访问器是一种特殊的语法,用于定义一个类的属性的读取和写入操作。属性访问器由 `get` 和 `set` 关键字定义。
`get` 关键字用于定义一个属性的读取操作,并且必须后跟一个没有参数的函数。这个函数的返回值就是这个属性的值。例如:
```typescript
class Person {
private _name: string;
get name() {
return this._name;
}
}
const person = new Person();
console.log(person.name); // 输出 undefined
person.name = 'Tom'; // 报错,name 属性只定义了 get 方法
```
在上面的代码中,`get name()` 方法定义了 `Person` 类的 `name` 属性的读取操作。在 `console.log(person.name)` 这行代码中,`person.name` 会自动调用 `get name()` 方法,返回 `_name` 属性的值。
需要注意的是,`get` 方法不能接受任何参数,且必须返回一个值。同时,如果只定义了 `get` 方法,而没有定义 `set` 方法,那么这个属性就是只读的,无法写入。
除了 `get` 方法,还有 `set` 方法用于定义属性的写入操作。例如:
```typescript
class Person {
private _name: string;
get name() {
return this._name;
}
set name(value: string) {
this._name = value;
}
}
const person = new Person();
person.name = 'Tom'; // 调用 set name() 方法,将 _name 属性设置为 'Tom'
console.log(person.name); // 调用 get name() 方法,输出 'Tom'
```
在上面的代码中,`set name(value: string)` 方法定义了 `Person` 类的 `name` 属性的写入操作。在 `person.name = 'Tom'` 这行代码中,`person.name` 会自动调用 `set name('Tom')` 方法,将 `_name` 属性设置为 `'Tom'`。
总结一下,`get` 和 `set` 方法是用于定义属性的读取和写入操作。它们必须以成员属性的形式定义在类中,并且不能与同名的成员属性或方法冲突。使用属性访问器可以更方便地控制类的属性的操作,提高代码的可读性和可维护性。