javascript 对象引用无法按预期工作

Tel*_*irw 5 javascript reference object

谁能解释一下下面这段代码中发生了什么?为什么会这样呢?我预计变量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?
Run Code Online (Sandbox Code Playgroud)

FZs*_*FZs 3

因为JavaScript中没有指针。


一开始,你有这样的东西:

base ---+
        |
        v
        {
          cars ----+
        }          |
                   v
                   {
                     color: "blue"
                     brand: "Ford"
                   }
                   ^
                   |
a -----------------+
Run Code Online (Sandbox Code Playgroud)

现在base.cars和都a指向同一个对象。

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

base ---+           
        |          
        v          
        {          
          cars ---> function(){ ... }
        }          
                   
                   {
                     color: "blue"
                     brand: "Ford"
                   }
                   ^
                   |
a -----------------+
Run Code Online (Sandbox Code Playgroud)

a将继续指向base.cars 赋值时引用的对象。然后,即使base.cars重新分配,也不会影响 的值(和引用)a


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

base ---+
        |
        v
        {
          cars ----+
        } ^        |
          |        v
          |        {
          |          color: "blue"
          |          brand: "Ford"
          |        }
          |     
          |        
a --------+
Run Code Online (Sandbox Code Playgroud)

...重新分配后:

base ---+
        |
        v
        {
          cars ----> function(){ ... }
        } ^        
          |        
          |        {
          |          color: "blue"
          |          brand: "Ford"
          |        }
          |        |
          |        +--> Garbage collection
a --------+         
Run Code Online (Sandbox Code Playgroud)