我想知道在Js中是否存在某些内容以及#34;重新定义var或object"和其他语言一样。类似于"别名"
例如 我有一个对象
var obj1 = new Object();
它有一个属性attr1和object2。
obj1.attr1 = 'a';
obj1.obj2 = new Object();
我可能有alias_attr1'和' alias_obj1'它们都与attr1和obj2相同?
由于
答案 0 :(得分:0)
如果我没记错的话,对象是通过引用传递的,但如果你不克隆它们,它们会引用相同的对象。原始人不是。如果您有以下内容:
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而不是直接覆盖它obj1.id = 8;
或间接obj2.three.id = 8;
,则会在obj2.four中看到更改:(obj2.four.id === 8) // --> true
所以它有点复杂,我不是最好解释这个,但是你可以在你的搜索引擎上找到关于它的多个博客。