JavaScript中属性对象的别名

时间:2017-03-02 09:52:40

标签: javascript object alias

我想知道在Js中是否存在某些内容以及#34;重新定义var或object"和其他语言一样。类似于"别名"

例如 我有一个对象

var obj1 = new Object();

它有一个属性attr1和object2。

obj1.attr1 = 'a';
obj1.obj2 =  new Object();

我可能有alias_attr1'和' alias_obj1'它们都与attr1和obj2相同?

由于

1 个答案:

答案 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

所以它有点复杂,我不是最好解释这个,但是你可以在你的搜索引擎上找到关于它的多个博客。