Können 2 Variablen auf dasselbe Objekt zeigen? (Javascript)

8

Ich versuche, sowohl die Variablen "my_a" als auch letters.a auf dasselbe Objekt zu zeigen.

%Vor%

Siehe diese Geige:

Ссылка

Aber wie Sie an der Ausgabe sehen können, funktioniert das nicht.

Irgendwelche Ideen? Ist das mit Javascript möglich?

Danke.

    
Wesley 27.08.2012, 14:18
quelle

6 Antworten

5

Die Antwort auf Ihre Frage lautet "ja", aber ich denke, dass Ihre Frage nicht genau beschreibt, was Sie zu tun versuchen. Was Sie möchten, ist für letters.a der Verweis auf die Variable "my_a" im Sinne dessen, was man in C ++ mit dem Operator & tun kann. Das ist in JavaScript nicht möglich.

Bei der Aussage:

%Vor%

Sie geben "my_a" einen neuen, anderen Wert. Daher bezieht sich letters.a immer noch auf dasselbe, während "my_a" geändert wurde. Es gibt keine Möglichkeit, eine Variable oder Objekteigenschaft dazu zu bringen, eine andere (in JavaScript) zu "verfolgen".

edit - tatsächlich kommt es mir vor, dass Sie etwas tun könnten, wonach Sie suchen, indem Sie einen "Getter" für die "a" Eigenschaft von "Buchstaben" definieren, einen, der den aktueller Wert von "my_a". Es würde diese Funktion in der JavaScript-Engine erfordern, die Sie verwenden, aber es würde ungefähr so ​​aussehen:

%Vor%

IE vor IE9 unterstützt das leider nicht. Hier ist die aktualisierte jsfiddle.

    
Pointy 27.08.2012, 14:22
quelle
3

Sie können 2 Variablen auf dasselbe Objekt oder denselben Wert in Javascript wie folgt verweisen:

%Vor%

Außerdem müssen Sie den Objektkonstruktor nicht verwenden, geschweifte Klammern dienen als Konstruktor und speichern die Typisierung. Dh, das:

%Vor%

Entspricht:

%Vor%     
Austin 27.08.2012 14:22
quelle
2

Sie sind verwirrt durch das Konzept der Zeiger. Wenn Sie ein Objekt in einer Variablen speichern, speichern Sie die Adresse dieses Objekts in der Variablen.

Also, my_a und letters.a enthalten beide die Adresse des gleichen Objekts. dann ändern Sie my_a, um die Adresse eines neuen Objekts zu enthalten. Aber letters.a enthält immer noch die Adresse des ersten Objekts!

So haben Sie am Ende Ihres Skripts my_a auf das Objekt 'c' und l chares.a auf das Objekt 'a' zeigen.

Die einzige Möglichkeit, Buchstaben.a und meine_a auf das Objekt zu zeigen, das Sie 'c' nennen, ist es,

zu tun %Vor%

erneut, indem Sie letters.a so einstellen, dass die Adresse des neuen 'c'-Objekts enthalten ist.

Übrigens enthalten Variablen, die einen grundlegenderen Typ haben (wie ints, char), tatsächlich den Wert der Variablen selbst, nicht einen Zeiger auf die tatsächlichen Daten.

    
Asciiom 27.08.2012 14:22
quelle
0

Ja, es ist möglich.

Sie waren in der richtigen Richtung, haben aber einen kleinen Fehler gemacht. Wenn Sie var letters = {'a': my_a, 'b': my_b}; initialisiert haben, haben Sie das Objekt eingefügt, auf das my_a in diesem Moment auf zeigte .

Das Ändern von my_a später hat letters nicht geändert, da es bereits einen direkten Zeiger auf Object('a') enthält.

    
Lior 27.08.2012 14:24
quelle
0

Ja, es ist sehr viel möglich und ist der Standard. In Ihrem Code ändern Sie jedoch den Verweis (my_a = neues Objekt ('c');), wenn Sie den Wert ändern möchten. Dies wäre klarer dargestellt, wenn Sie Arrays anstelle von Strings, z. my_1 = [23]; my_1 [0] = 8;

    
jsha 27.08.2012 14:25
quelle
0

Warum verwenden Sie kein solches Konstrukt:

%Vor%

Es ist viel sauberer imho.

    
akluth 27.08.2012 14:26
quelle