Javascript 对象 - 这个

Javascript Object - this

我想知道,由于 JavaScript 上的对象作为引用,我仍然如何从克隆的对象中获取属性值,如下所示:

let user = {
  name: 'Dan',
  age: 26,
  sayHi(){
      console.log('Hi', this.name);
  }
    
}

let user2 = user;

user.name = 'Suzan';
user = null;

console.log(user2.name);
//return Suzan

如果对象 user 收到 null,user2 不应该也为 null 吗?因为它们指向相同的内存地址?

完成后

user2 = user;

两个变量都指向同一个对象。但是当你这样做时

user = null;

您只需更改 user 指向的位置,这对 user2 指向的位置没有影响。它仍然指向原始对象。

如果您熟悉 C 等语言,则类似于此:

struct u {
    char *name;
    int age;
};

struct u foo = {"Dan", 26};

struct u *user = &foo;
struct u *user2 = user;

user->name = "Suzan";
user = NULL;

printf("%s\n", user2->name);

更改一个指针不会影响指向同一内存的另一个指针。

不要用内存地址来考虑这个。 JavaScript 不涉及该级别的计算。

let user = {}

user 的值是对对象的引用。

let user2 = user;

请注意 user2 的值是对同一对象的引用。

user.name = 'Suzan';

现在该对象的 name 属性 的值为 'Suzan'.

这与以相同方式使用 user2.name 得到的结果完全相同。

user = null;

现在 user 的值为 null。

user2 的值仍然是对该对象的引用。

null 分配给 user 会更改 user。它不影响旧值引用的对象。

console.log(user2.name);

因为 user2 是对原始对象的引用,所以这仍然有效。

如果您还分配了 user2 = null,那么将没有对该对象的引用,您将无法访问它(并且它会被垃圾收集)。

当你引用一个对象时,被引用的对象只会改变属性而不是对象(user2)的形状。

如果您将用户对象更改为 null 或空数组,user2 将始终保持不变。