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

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>

牧羊人nacy
浏览 178回答 3
3回答

犯罪嫌疑人X

Object.defineProperty方法的作用是:将属性添加到对象或修改现有属性的特性这里也就是为book新加了一个year属性;this._year = newValue;重新给_year赋值:2006this.edition += newValue - 2004;1+=2006-2004结果是3

米脂

defineProperty作用是对一个对象添加一个属性,或者是修改一个存在的属性。而在你的例子中,是添加一个新的属性。也就是book有3个属性。_year,edition,year。book.year=2006,赋值时如果大于2004,就修改了_year和edition的值。例如2006,_year=2006edition=1+2006-2004=3在倒数第三行,如果给_year赋值,只会修改_year的值。并不会修改book对象中的其它值。

qq_笑_17

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的值。这样解释能明白了么?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java
JavaScript