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 = 2006;alert(book.edition);</script>
3 回答
犯罪嫌疑人X
TA贡献2080条经验 获得超4个赞
Object.defineProperty方法的作用是:将属性添加到对象或修改现有属性的特性
这里也就是为book新加了一个year属性;
this._year = newValue;重新给_year赋值:2006
this.edition += newValue - 2004;
1+=2006-2004
结果是3
米脂
TA贡献1836条经验 获得超3个赞
defineProperty作用是对一个对象添加一个属性,或者是修改一个存在的属性。而在你的例子中,是添加一个新的属性。也就是book有3个属性。_year,edition,year。
book.year=2006,赋值时如果大于2004,就修改了_year和edition的值。例如2006,_year=2006
edition=1+2006-2004=3
在倒数第三行,如果给_year赋值,只会修改_year的值。并不会修改book对象中的其它值。
qq_笑_17
TA贡献1818条经验 获得超7个赞
Object.defineProperty(book , "year" ...
这段是为book增加了year属性,同时定义了set和get方法,当book.year = 2006时实际会执行book.year.set(2006),这样book._year的值就是2006了,同理,如果alert(book.year)也会实际执行book.year.get()方法,即返回book._year的值。
这样解释能明白了么?
添加回答
举报
0/150
提交
取消