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
作为返回结果。我无法用你的精确代码重现你的结果。