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
似乎看到了双向绑定的影子,嘿嘿嘿!!