3 回答

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

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