[英]understanding JavaScript Prototypal Inheritance
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
在第一種情況下,直接對屬性值進行分配。 JavaScript將新屬性添加到子范圍。
在第二種情況下,將對屬性的內容進行分配。 由於該屬性在子作用域上不存在,因此JavaScript搜索原型鏈以查找現有內容並進行修改。
有關更多閱讀,請參閱AngularJS Wiki-了解范圍和原型繼承的細微差別 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.