Getter
get 绑定一个函数到对象属性上面。当引用这个属性名的时候,绑定的这个函数就会被调用。
Syntax
`{get prop(){...}}
{get [expression](){...}}`
Parameters
##### prop
`绑定到指定函数的属性名。
##### expression
在ES6中,你可以声明一个表达式,来计算一个属性名。
Description
有时,你想通过访问属性名来获取一个动态计算的值,或者想不通过方法调用就获取对象内部的状态。Get方法可以实现这个需求。
尽管可以通过组合使用Get,Set方法来设置一个伪装的属性设置和访问,但是一个对象不能同时有一个传统的属性定义和用Get定义的属性
。
注意下面的Get语法
*属性值函数不能有参数
*不能有两个相同的Get,或者一个Get一个传统的属性名定义方式。({get x(){}, get x(){}) 或{x:...,get x(){}}都是不允许的)
Getter可以通过delete删除
Example
定义一个Getter
下面的代码会在obj上面定义一个伪属性 first,来获取log的第一个属性。
`var log = ['text']
var obj = {
get first(){
return log[0];
}
}`
**注意直接给first赋值不会有作用**
用delete删除Getter
`delete obj.first`
使用defineProperty定义Getter
使用Object.defineProperty 来给对象随时添加Getter。var obj = {count:0} Object.defineProperty(0,'size',{get:function(){return 1;}} console.log(o.b) //运行getter,返回1
使用计算的属性名(es6 的提议,还未广泛使用)
var expr = "name"; var obj = { get [expr](){return 'zs'} }; console.log(obj.name)//返回 zs
智能、自写,懒 getters
通过Getters,我们可以定义属性,并且这些属性直到使用的时候才会去计算。这就是说,如果这个属性不使用,就会一直不计算。
这样就延迟或者消除了计算属性值得消耗。
另外的优化技术是:懒计算或者延迟计算属性值并且为后面的使用缓存计算结果。这个技术叫 智能(memoized) getter。属性值
第一次计算的时候被缓存起来以后就不用重新计算。
在下列场景,这个技术很有用。
-如果计算消耗大量的cpu,内存,或者是耗时的网络或文件操作的时候。
-这个属性值不需要立即使用,以后才会需要,或者可能根本不需要
-计算这个属性会消耗大量的资源,以后不需要重新计算。
但是在属性需要每次重新计算的时候,这个方法就不适用了。