# 章序号/节序号/节/笔记序号
Objective:
# 概念阐释
## 语义
`get`语法可以将*属性*绑定到**查询、读取**该属性的方法函数中。可以添加条件语句对属性进行重组、读取或查询。
## 语法
```js
get obj(){
this.prop
}
outerObject.obj;//调用getter method 不需要()
```
- `get`方法可使用条件语句(比如`if`)返回不同的值。
- 在`get`方法中,我们可以使用`this`访问调用对象的属性。
- 属性不能与getter / setter函数共享相同的名称.如果这样做,那么调用该方法将导致无限调用[[堆栈]]错误。 一种解决方法是在属性名称前添加**下划线**,就像我们在上面的示例中所做的那样。
# 举例子
通常情况下`get`和`set`一起用,[[js objects set方法更新属性|set]]将对象中的属性设置为新的值,`get`
负责返回新的值。
```js
const person = {
_firstName: 'John',
_lastName: 'Doe',
//get方法调用this属性,加上条件语句
get fullName() {
if (this._firstName && this._lastName){
return `${this._firstName} ${this._lastName}`;
} else {
return 'Missing a first name or a last name.';
}
}
}
// 通过fullName方法读取_firstName和_lastName属性
person.fullName; // 'John Doe'
//不需要通过get medthod就可以重新分配属性值
person._firstName = 7;
console.log(person._firstName);
```
# 类比、比较与对比
# 问题
- [练习题](https://www.codecademy.com/courses/introduction-to-javascript/lessons/advanced-objects/exercises/getters)
用get 方法查询`_energyLevel`的属性值是否是数字,如果是console`'My current energy level is ' + this._energyLevel`,如果不是console其他。最终调用get 方法。
# 问题答案
```js
const robot = {
_model: '1E78V2',
_energyLevel: 100,
get energyLevel(){
if(typeof this._energyLevel === 'number') {
return 'My current energy level is ' + this._energyLevel
} else{
return 'System malfunction: cannot retrieve energy level'
}
}
};
console.log(robot.energyLevel);
```
#### 错误集
- 忘记调用方法
- `typeof`总是写成`typeOf`
# 备注(经验集/错误集)
## 参考资料
- [MDN-get](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/get)