于是,时过境迁:
盒子a里,抛弃旧房子钥匙,放进了一把新房子钥匙,等价于
a = {n: 2}盒子b里,还是旧房子的钥匙。
同时,因为在盒子a换钥匙之前,我们通过盒子a拿到旧钥匙来到旧房子,
并将盒子a换钥匙之后的新钥匙,放进了旧房子的盒子x里面,那盒子b等价于
b = { n: 1, x: {n: 2} }也可以将这个例子稍加处理:
var xiaoMing = {moneyBox: 1} var xiaoQiang = xiaoMing xiaoMing.keyBox = xiaoMing = {moneyBox: 200} console.log(xiaoMing.keyBox) // undefined console.log(xiaoQiang.keyBox) // {moneyBox: 200}再逐句翻译:
var xiaoMing = {moneyBox: 1}
小明有一把房钥匙,这个房子里有个钱柜,里面放着1元钱。
var xiaoQiang = xiaoMing
小强偷偷复制了一把小明的房钥匙,从此他也可以进出小明的房子。
xiaoMing.keyBox = xiaoMing = {moneyBox: 200}
小明在此房子里做了一个钥匙柜,这个钥匙柜能自动生成一把小明口袋里的钥匙(xiaoMing.keyBox = xiaoMing的作用,可能有点超现实),
但是小明想,我口袋里的钥匙现在就是这个房子的钥匙,放在我的钥匙柜里也没什么意义,
不如这样吧,我再买一套房子,把口袋里的钥匙替换成新房子的钥匙,那这个钥匙柜里不就存下新房子的钥匙了吗。
于是,小明果断又买了一套房子,这个房子里也有个钱柜,里面放200元钱。
小明正准备回旧房子呢,突然想起来,自己口袋里的钥匙已经替换成新房子的钥匙了,
现在他只能进新房子,而进不去旧房子了,郁闷...
再说小强,
小强当初复制的是小明旧房子的钥匙,所以小强依然能来到这个旧房子,
进来后发现,多了一个钥匙柜,并且里面放着一把钥匙,
没错,这就是小明新房子的钥匙。
所以现在的局势很明朗了:
小明只有新房子的钥匙,只能进新房子(而且他应该觉得旧房子已经没人能进去了)。
而小强有小明旧房子的钥匙,
同时这个房间里还有小明的新房子的钥匙,所以小强也能进小明的新房子。
用代码表示,就相当于
xiaoMing = {moneyBox: 200} xiaoQiang = { moneyBox: 1, keyBox: {moneyBox: 200} }点击查看此文章的最新版本和全部内容