簡體   English   中英

了解JavaScript原型繼承

[英]understanding JavaScript Prototypal Inheritance

我正在閱讀有關角度繼承的文章 ,該文章由JavaScript Prototypal Inheritance開始。 文章說,當我們執行childScope.aString = 'child string' ,新屬性將隱藏/陰影具有相同名稱的parentScope屬性 ,但是當我們執行childScope.anArray[1] = 22 ,屬性值將在原始對象上更新。 我不明白
誰能幫忙。
先感謝您

ab = c為對象a的屬性b顯式分配一個值。 這將覆蓋所有隱式繼承的屬性。 具有實際繼承關系的實際Javascript示例:

 function A() {} A.prototype.b = 'c'; var a = new A(); console.log(ab); 

a實際上沒有屬性b ,它只是從原型繼承而來。 現在:

a.b = 'd';

現在,它已將實際屬性b直接附加到a 原型仍然具有屬性b = 'c' ,但是在a不再可見。 ab現在'd'

a.anArray[1] = 22之間的區別在於,這里您要修改可變對象。 你不是分配給一個屬性上a ,您取得財產a ,然后修改它。 這不會更改a ,它會更改對象anArray的實例。 這對有權訪問anArray所有對象都是可見的。

屬性訪問解析可以作為對屬性的寫入或讀取操作的一部分進行。 原型繼承說,只有作為讀取操作一部分的解析才應涉及繼承的屬性查找。

您的第一種情況涉及對該屬性的寫操作-因此將不會對繼承的屬性進行任何查找。

但是,在第二種情況下,屬性查找作為對屬性的索引查找的一部分發生,而不是對屬性的寫操作-即讀取操作,因此不對繼承的屬性進行查找

childScope.aString = 'child string'
childScope.anArray[1] = 22

1個

在第一種情況下,直接對屬性進行分配。 JavaScript將新屬性添加到子范圍。

在第二種情況下,將對屬性的內容進行分配。 由於該屬性在子作用域上不存在,因此JavaScript搜索原型鏈以查找現有內容並進行修改。

有關更多閱讀,請參閱AngularJS Wiki-了解范圍和原型繼承的細微差別

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM