亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

對象里面的屬性名為_year,使用defineProperty()方法的時候用的卻是“year”,十分疑惑

對象里面的屬性名為_year,使用defineProperty()方法的時候用的卻是“year”,十分疑惑

小佳佳QAQ 2015-12-17 10:46:24
代碼內容出自《JavaScript高級程序設計(第三版)》141頁,講的是面向對象的程序設計
查看完整描述

3 回答

?
小佳佳QAQ

TA貢獻8條經驗 獲得超19個贊

書中有說明的(以下是原文):

訪問器屬性不包含數據值;它們包含一對兒 getter 和 setter 函數(不過,這兩個函數都不是必需的)。

在讀取訪問器屬性時,會調用 getter 函數,這個函數負責返回有效的值;在寫入訪問器屬性時,會調用

setter 函數并傳入新值,這個函數負責決定如何處理數據。

訪問器屬性不包含數據值;它們包含一對兒 getter 和 setter 函數(不過,這兩個函數都不是必需的)。

在讀取訪問器屬性時,會調用 getter 函數,這個函數負責返回有效的值;在寫入訪問器屬性時,會調用

setter 函數并傳入新值,這個函數負責決定如何處理數據。

訪問器屬性不能直接定義,必須使用 Object.defineProperty() 來定義。

_year 前面的下劃線是一種常用的記號,用于表示只能通過對象方法訪問的屬性。而訪問器屬性 year 則包含一個

getter 函數和一個 setter 函數。getter 函數返回 _year 的值,setter 函數通過計算來確定正確的版本。

我的理解:

_year是一個只能通過對象方法訪問的內部屬性,用于存儲對象方法需要用到的值。

而訪問器屬性year通過Object.defineProperty() 來定義,本身不包含數據值,使用get和set讀取和設置對象中的屬性值,返回值。(year沒有在對象字面量中直接體現)

_year≠year,_year是普通的屬性,只是前面添加了"_"表示其不能直接訪問;year是訪問器屬性,本身就沒有數值,主要的工作是定義出來操作_year和edition的值,它也可以訪問_year并直接返回_year存儲的內容,比如它的get方法。

另外,書中的定義多個屬性Object.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 對象上定義了兩個數據屬性( _year 和 edition )和一個訪問器屬性( year )。

最終的對象與上一節中定義的對象相同。唯一的區別是這里的屬性都是在同一時間創建的。

以上內容僅供參考。如有理解錯誤,請指出,不勝感激!

查看完整回答
1 反對 回復 2016-11-21
  • 葉微白_
    葉微白_
    對的,就是這樣,這個例子,是想說明對象內部,當賦值,修改值的時候,會發生~
?
李曉健

TA貢獻1036條經驗 獲得超461個贊

他這個_year 只是在內部用的,其實對外用的是year ?他這樣做就相當于給 book又添加了一個year屬性嘛 只不過你在取year值時,他內部去取的是_year的值,賦值時也是一樣,你賦給的是year ,他在內部又把這個值賦給了_year

查看完整回答
反對 回復 2015-12-17
?
慕粉4229183

TA貢獻2條經驗 獲得超1個贊

? ?123

查看完整回答
反對 回復 2016-11-17
  • 3 回答
  • 0 關注
  • 1936 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號