# 章序号/节序号/节/笔记序号 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)