getter和setter 到底是个啥玩意

2018-10-25  本文已影响0人  阿龙哟

js中一共有两种属性,一种数据属性,一种访问器属性

访问器属性不包函数值;包含一对getter和setter函数(非必须)

读取访问器属性时会调用getter函数,返回有效值;在写入访问器属性时,会调用setter函数并传入新值,这个函数负责决定如何处理数据

访问器属性不能直接定义,必须使用Object.defineProperty()来定义

用 Object.defineProperty() 添加的属性值是不可修改的。

//Object.defineProperty(obj, prop, descriptor)
//obj 要在其上定义属性的对象。
//prop 要定义或修改的属性的名称。
// descriptor 将被定义或修改的属性描述符。

var book = {
    _year : 2004,
    edition : 1
}
Object.defineProperty(book,"year",{
    get: function(){
        return this._year;
    },
    set: function(newValue){
        if(newValue > 2004){
            this._year = newValue
            this.edition += newValue-2004 
        }
    }
})

book.year = 2005 
alert(book.edition)//2

上述代码创建了一个book对象,两个默认属性是_year和edition

定义了一个访问器属性year 包含getter 和setter两个函数

getter函数返回_year的值,setter函数通过计算来确定正确的版本

当修改访问器属性时触发setter函数,导致_year变成了2005,而edition变成了2

似乎看到了双向绑定的影子,嘿嘿嘿!!

上一篇下一篇

猜你喜欢

热点阅读