javascript对象引用未按预期工作

javascript对象引用未按预期工作,javascript,object,reference,Javascript,Object,Reference,有人能解释一下下面的代码是怎么回事吗?为什么它是这样工作的?我希望变量a也会改变 var base = { cars: { color: "blue", brand: "Ford" } } var a = base.cars; base.cars = function () { console.log("example method") } console.log(base) // changed to method console.log(a) // still i

有人能解释一下下面的代码是怎么回事吗?为什么它是这样工作的?我希望变量
a
也会改变

var base = {
  cars: {
    color: "blue",
    brand: "Ford"
  }
}

var a = base.cars;
base.cars = function () { console.log("example method") }

console.log(base) // changed to method
console.log(a) // still is object - why?

因为JavaScript中没有指针


在开始时,您有如下内容:

base---+
|
v
{
汽车----+
}          |
v
{
颜色:“蓝色”
品牌:“福特”
}
^
|
a-----------------+
现在
base.cars
a
都指向同一个对象

然后,当您重新分配
base.cars
时,它变成:

base--+
|          
v
{          
cars-->function(){…}
}          
{
颜色:“蓝色”
品牌:“福特”
}
^
|
a-----------------+
a
将在分配时继续指向
base.cars
引用的对象。然后,即使重新分配了
base.cars
,也不会影响
a
的值(和引用)


如果您能够创建指针,它将如下所示:

base---+
|
v
{
汽车----+
} ^        |
|五
|        {
|颜色:“蓝色”
|品牌:“福特”
|        }
|     
|        
a--------+
…重新分配后:

base---+
|
v
{
cars-->function(){…}
} ^        
|        
|        {
|颜色:“蓝色”
|品牌:“福特”
|        }
|        |
|+-->垃圾收集
a--------+

不清楚您为什么期望这样。您正在为属性指定新值,但这不会改变对旧值的任何其他引用。您将其与指针混淆,其中使用指针更改值会更改使用该指针引用的所有其他值。在这里,创建了一个新对象,base.cars的引用被更改,但a的引用保持不变。我正在为控制台日志获取对象。您是说在
console.log(base)
上没有将
object
作为返回结果。我无法用你的精确代码重现你的结果。