我想知道在Js中是否存在某種東西來「重新定義var或object」,就像其他語言一樣。像一個「別名」JavaScript中屬性對象的別名
對於實施例 東西我有一個對象
var obj1 = new Object();
這具有的屬性attR1和對象2。
obj1.attr1 = 'a';
obj1.obj2 = new Object();
是否有可能,我有「alias_attr1」和「alias_obj1」和他們都相同的是attR1和obj2的?
感謝
我想知道在Js中是否存在某種東西來「重新定義var或object」,就像其他語言一樣。像一個「別名」JavaScript中屬性對象的別名
對於實施例 東西我有一個對象
var obj1 = new Object();
這具有的屬性attR1和對象2。
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而不是覆蓋它,無論是直接obj1.id = 8;
或間接obj2.three.id = 8;
,這些更改將出現在obj2.four:(obj2.four.id === 8) // --> true
所以這是一個有點複雜,我不是最好的解釋這一點,但有多個關於它的博客可以在您的最喜歡搜索引擎中找到。
的定義但你創建另一個對象...我引用像'obj2 .three = obj2.one'或'obj2.three = obj2.four'。 –
你也這麼做。如果你進入你的代碼'obj1.obj3 = obj1.obj2',你爲你自己的obj2創建一個'別名'。但是如果你去'obj1.obj3 = new Object()',你可以創建第三個(不同的)對象。所以你可以去'obj1.alias_attr1 = obj1.attr1',但它們將是兩個不同的字符串,你可以單獨編輯。如果使用'obj1.alias_obj1 = obj1.obj2',那麼'obj1.alias_obj1'或'obj1.obj2'中的任何更改都會出現在同一個obj的另一個引用內。但是一旦你覆蓋了其中的一個,'obj1.alias_obj1 ='someThingNotObj2Reference',引用就會消失。 – Shilly
謝謝expanation :-D –
別名?,然後如果你改變原來的別名?,如果這是真的,javascript wirks是這樣的,因爲它的作用與參考 –