首頁 > web前端 > js教程 > 主體

JavaScript中物件property的讀取與寫入方法介紹_javascript技巧

WBOY
發布: 2016-05-16 16:23:09
原創
1485 人瀏覽過

JavaScript中,可以透過點號運算子」。或中括號運算子」[]「來對物件的property進行讀取與寫入:


複製程式碼 程式碼如下:

var o = {x:1, y:2};
console.log(o.x);//1
console.log(o["y"]);//2
o.y = 7;
console.log(o["y"]);//7


值得注意的是,如果使用中括號運算符,則運算符內的值類型必須是string,或是能夠轉換成string的表達式:


複製程式碼 程式碼如下:

console.log(o[y]);//ReferenceError: y is not defined
var v = "y";
console.log(o[v]);//7


與Java語言不同的是,JavaScript中物件的property可以動態新增或刪除。當對某個property進行賦值操作時,如果該property不存在,JavaScript會在物件中動態加入此property:


複製程式碼 程式碼如下:

o.z = 99;
console.log(o);//Object {x=1, y=7, z=99}

 

原型繼承鏈中property的讀取

 

JavaScript中所有的對象均有一個prototype原型對象,並從該原型對像中繼承property;因此,JS中一個對象的property分成兩大類:

1.物件本身所擁有的property(“Own Property”)。
2.從原型物件繼承而來的property。

當讀取物件的property時,所遵循的規則如下:

1.從物件本身的property集合(“Own Property”)中搜尋需要讀取的property;如果可以搜尋到,則直接讀取該property並傳回其值。
2.如果無法從物件本身的property集合(“Own Property”)中搜尋到該property,那麼則從物件的prototype原型鏈中繼續進行搜索,直至搜索到該property並返回其值。
3.如果無法從物件本身的property集合(“Own Property”)中搜尋到該property,也無法從物件的所有prototype物件中搜尋到該property,則傳回undefined。

原型繼承鏈中property的寫入

在對JavaScript物件的property進行寫入時,所遵循的規則如下:

1.如果物件本身有該property,且該property可寫,則將新值寫入該property。若該property唯讀,則報錯。
2.如果物件本身沒有該property,且其所有的prototype物件中也不存在該property,則將此property加入該物件中。
3.如果物件本身沒有該property,但其prototype物件中存在該property且可寫,那麼JS會在物件中新建這個property;也就是說,該物件覆寫了其prototype物件中的這個property。 prototype物件中此property值不變。
4.如果物件本身沒有該property,但其prototype物件中存在該property且唯讀,則報錯。
5.如果物件本身沒有該property,但其prototype物件中存在該property的setter方法,那麼JS會呼叫該prototype物件中的setter方法。值得注意的是,在運行setter方法時,如果涉及變數賦值,那麼賦值操作將作用在物件本身上,而prototype物件不會有任何改變。對於這一行為,可以理解為:物件從prototype處繼承了setter函數並加以執行。

從上述規則中可以發現,如果對property的賦值操作成功,那麼最後被修改的永遠是物件自身,其prototype原型物件不會有任何改動。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!