对访问器属性的一些理解
红宝书的一段代码如下:
//定义一个book对象 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 //2004
改写一下这个代码:
//定义一个book对象 var book={ _year:2004, edition:1 }; Object.defineProperty(book,"year",{ get:function(){ console.log(“调用了get方法”); return this._year; }, set:function(newValue){ console.log("调用了set方法"); if(newValue>2004){ this._year=newValue; this.edition+=newValue-2004; } } }); book.year; //调用了get方法 //2004 book.year=2005; //调用了set方法 //2005
直接调用 book.year
,即调用了这个访问器属性中定义的 get
方法,返回 book._year
这个数据属性。如果给 book.year
赋值,就是调用了这个访问器属性中定义的 set
方法。