JavaScript 中属性对象的别名
Alias for attribute object in JavaScript
我想知道 Js 中是否存在像其他语言中那样 "redefines var or object" 的东西。有点像 "alias"
例如
我有一个对象
var obj1 = new Object();
这有属性 attr1 和 object2。
obj1.attr1 = 'a';
obj1.obj2 = new Object();
我有没有可能 'alias_attr1' 和 'alias_obj1' 并且它们都与 attr1 和 obj2 相同?
谢谢
如果我没记错的话,对象是通过引用传递的,但如果您不克隆它,它们将引用同一个对象。原语不是。因此,如果您有以下条件:
var obj1 = {
"id" : 7
};
var obj2 = {
"one" : "a",
"two" : "a",
"three" : obj1,
"four" : obj1
};
console.log(obj2.three === obj2.four) // -- > true
由于 obj1 是一个对象并且您没有克隆它,因此 obj2.three 和 obj2.four 都引用同一个对象。然而,obj2.one 和 object2.two 是字符串,即使它们具有相同的值,它们也不会相互引用。
但不止于此,您可以单独覆盖objs。因此,如果您将 obj1 设置为其他内容,obj2.three 和 obj2.four 仍将包含原始 obj1。 obj1 = 'test';
--> obj2 保持不变。
但是,如果您直接 obj1.id = 8;
或间接 obj2.three.id = 8;
更新 obj1 而不是覆盖它,更改将在 obj2.four 中看到:(obj2.four.id === 8) // --> true
所以它有点复杂,我不是最好的解释者,但是你可以在你最喜欢的搜索引擎上找到很多关于它的博客。
我想知道 Js 中是否存在像其他语言中那样 "redefines var or object" 的东西。有点像 "alias"
例如 我有一个对象
var obj1 = new Object();
这有属性 attr1 和 object2。
obj1.attr1 = 'a';
obj1.obj2 = new Object();
我有没有可能 'alias_attr1' 和 'alias_obj1' 并且它们都与 attr1 和 obj2 相同?
谢谢
如果我没记错的话,对象是通过引用传递的,但如果您不克隆它,它们将引用同一个对象。原语不是。因此,如果您有以下条件:
var obj1 = {
"id" : 7
};
var obj2 = {
"one" : "a",
"two" : "a",
"three" : obj1,
"four" : obj1
};
console.log(obj2.three === obj2.four) // -- > true
由于 obj1 是一个对象并且您没有克隆它,因此 obj2.three 和 obj2.four 都引用同一个对象。然而,obj2.one 和 object2.two 是字符串,即使它们具有相同的值,它们也不会相互引用。
但不止于此,您可以单独覆盖objs。因此,如果您将 obj1 设置为其他内容,obj2.three 和 obj2.four 仍将包含原始 obj1。 obj1 = 'test';
--> obj2 保持不变。
但是,如果您直接 obj1.id = 8;
或间接 obj2.three.id = 8;
更新 obj1 而不是覆盖它,更改将在 obj2.four 中看到:(obj2.four.id === 8) // --> true
所以它有点复杂,我不是最好的解释者,但是你可以在你最喜欢的搜索引擎上找到很多关于它的博客。