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 将始终保持不变。
我想知道,由于 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 将始终保持不变。