ES5 Function Get

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,内存,或者是耗时的网络或文件操作的时候。
-这个属性值不需要立即使用,以后才会需要,或者可能根本不需要
-计算这个属性会消耗大量的资源,以后不需要重新计算。

但是在属性需要每次重新计算的时候,这个方法就不适用了。

posted @ 2016-06-23 09:58  郭逊  阅读(639)  评论(0编辑  收藏  举报