为了账号安全,请及时绑定邮箱和手机立即绑定

请问第三行为什么是book.year而不是book._year,求大佬指点~

请问第三行为什么是book.year而不是book._year,求大佬指点~

牧羊人nacy 2022-01-05 11:07:38
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

查看完整回答
反对 回复 2022-01-09
?
米脂

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对象中的其它值。

查看完整回答
反对 回复 2022-01-09
?
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的值。
这样解释能明白了么?

查看完整回答
反对 回复 2022-01-09
  • 3 回答
  • 0 关注
  • 175 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信