是否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 **如何引用对象? –