3 回答

TA貢獻(xiàn)8條經(jīng)驗(yàn) 獲得超19個(gè)贊
書(shū)中有說(shuō)明的(以下是原文):
訪問(wèn)器屬性不包含數(shù)據(jù)值;它們包含一對(duì)兒 getter 和 setter 函數(shù)(不過(guò),這兩個(gè)函數(shù)都不是必需的)。
在讀取訪問(wèn)器屬性時(shí),會(huì)調(diào)用 getter 函數(shù),這個(gè)函數(shù)負(fù)責(zé)返回有效的值;在寫(xiě)入訪問(wèn)器屬性時(shí),會(huì)調(diào)用
setter 函數(shù)并傳入新值,這個(gè)函數(shù)負(fù)責(zé)決定如何處理數(shù)據(jù)。
訪問(wèn)器屬性不包含數(shù)據(jù)值;它們包含一對(duì)兒 getter 和 setter 函數(shù)(不過(guò),這兩個(gè)函數(shù)都不是必需的)。
在讀取訪問(wèn)器屬性時(shí),會(huì)調(diào)用 getter 函數(shù),這個(gè)函數(shù)負(fù)責(zé)返回有效的值;在寫(xiě)入訪問(wèn)器屬性時(shí),會(huì)調(diào)用
setter 函數(shù)并傳入新值,這個(gè)函數(shù)負(fù)責(zé)決定如何處理數(shù)據(jù)。
訪問(wèn)器屬性不能直接定義,必須使用 Object.defineProperty() 來(lái)定義。
_year 前面的下劃線是一種常用的記號(hào),用于表示只能通過(guò)對(duì)象方法訪問(wèn)的屬性。而訪問(wèn)器屬性 year 則包含一個(gè)
getter 函數(shù)和一個(gè) setter 函數(shù)。getter 函數(shù)返回 _year 的值,setter 函數(shù)通過(guò)計(jì)算來(lái)確定正確的版本。
我的理解:
_year是一個(gè)只能通過(guò)對(duì)象方法訪問(wèn)的內(nèi)部屬性,用于存儲(chǔ)對(duì)象方法需要用到的值。
而訪問(wèn)器屬性year通過(guò)Object.defineProperty() 來(lái)定義,本身不包含數(shù)據(jù)值,使用get和set讀取和設(shè)置對(duì)象中的屬性值,返回值。(year沒(méi)有在對(duì)象字面量中直接體現(xiàn))
_year≠year,_year是普通的屬性,只是前面添加了"_"表示其不能直接訪問(wèn);year是訪問(wèn)器屬性,本身就沒(méi)有數(shù)值,主要的工作是定義出來(lái)操作_year和edition的值,它也可以訪問(wèn)_year并直接返回_year存儲(chǔ)的內(nèi)容,比如它的get方法。
另外,書(shū)中的定義多個(gè)屬性O(shè)bject.defineProperties()恰好可以解釋_year和year是兩個(gè)不同的屬性,書(shū)中代碼如下:
var?book?=?{}; Object.defineProperties(book,?{ ????_year:?{ ????????value:?2004 ????}, ????edition:?{ ????????value:?1 ????}, ????year:?{ ????????get:?function(){ ????????????return?this._year; ????????}, ????????set:?function(newValue){ ????????????if?(newValue?>?2004)?{ ????????????????this._year?=?newValue; ????????????????this.edition?+=?newValue?-?2004; ????????????} ????????} ????} });
以上代碼在 book 對(duì)象上定義了兩個(gè)數(shù)據(jù)屬性( _year 和 edition )和一個(gè)訪問(wèn)器屬性( year )。
最終的對(duì)象與上一節(jié)中定義的對(duì)象相同。唯一的區(qū)別是這里的屬性都是在同一時(shí)間創(chuàng)建的。
以上內(nèi)容僅供參考。如有理解錯(cuò)誤,請(qǐng)指出,不勝感激!

TA貢獻(xiàn)1036條經(jīng)驗(yàn) 獲得超461個(gè)贊
他這個(gè)_year 只是在內(nèi)部用的,其實(shí)對(duì)外用的是year ?他這樣做就相當(dāng)于給 book又添加了一個(gè)year屬性嘛 只不過(guò)你在取year值時(shí),他內(nèi)部去取的是_year的值,賦值時(shí)也是一樣,你賦給的是year ,他在內(nèi)部又把這個(gè)值賦給了_year
添加回答
舉報(bào)