是否objectA.pointer
引用或參考objectB.pointer
甚至仍然存在objectA
和objectB
設置爲null
?
是的。
也許有些ASCII藝術幫助。執行
var objectA = {};
var objectB = {};
後的環境包含兩個變量(objectA
和objectA
)持有兩個對象(表示爲ref:XXX
)引用:
+--------------+
+-------+---------+ +--->| Object#123 |
|objectA|ref:123 *+--+ +--------------+
+-------+---------+
|objectB|ref:456 *+--+ +--------------+
+-------+---------+ +--->| Object#456 |
+--------------+
屬性添加到OBJETS後,
objectA.pointer = objectB;
objectB.pointer = objectA;
兩個對象具有屬性pointer
每個包含對其他對象的引用:
+-----------------+
| Object#123 |
+--->+-------+---------+<----+
+-------+---------+ | |pointer|ref:456 *+---+ |
|objectA|ref:123 *+-+ +-------+---------+ | |
+-------+---------+ | |
|objectB|ref:456 *+-+ +-----------------+ | |
+-------+---------+ | | Object#456 | | |
+--->+-------+---------+<--+ |
|pointer|ref:123 *+-----+
+-------+---------+
正如你可以看到本身,有一個pointer
屬性和objectA
和objectB
變量之間沒有任何關係。 objectA.pointer
並不是指可變objectB
,它得到其值(ref:456
),該對象的引用的副本。
兩個變量設置爲null
後,
objectA = null;
objectB = null;
環境是這樣的:
+-----------------+
| Object#123 |
+-------+---------+<----+
+-------+---------+ |pointer|ref:456 *+---+ |
|objectA| null | +-------+---------+ | |
+-------+---------+ | |
|objectB| null | +-----------------+ | |
+-------+---------+ | Object#456 | | |
+-------+---------+<--+ |
|pointer|ref:123 *+-----+
+-------+---------+
的pointer
性質仍持有其他對象的引用。替換objectA
和objectB
的值並沒有改變這一點。
'對象A = NULL;'只設置*變量*'objectA'到'null'值。它不會更改*屬性*'objectB.pointer'的值。 'objectB.pointer'仍然指向一個對象。變量/屬性只是值的容器。一個賦值「複製」該值,現在兩個容器包含「相同」值(每個都有自己的副本)。替換其中一個容器中的值不會奇蹟般地替換另一個容器中的值。 –
將'objectA'設置爲'null'不會改變'objectB.pointer' – vlaz
@FelixKling:如果objectB設置爲null,** objectB.pointer **如何引用對象? –