2017-04-26 6 views
0

Fragen Sie sich, ob es möglich ist, Objektreferenzvariablen zu aktualisieren, wenn Variable eine Zeichenfolge ist? Es funktioniert, wenn ich das ganze Objekt zuweist, aber nicht mit der Zeichenkette arbeitet. Ich könnte auch das ganze Objekt zuweisen, aber das Problem hier ist, dass ich kein Objekt brauche, aber ich brauche eine Zeichenfolge, da es eine globale Variable des Angular 2-Dienstes ist.Referenzvariablen aktualisieren

https://jsfiddle.net/009kqqrt/

obj = { var: 'initial' }; 
a = [{ test: 'old', new: 'no' }, { test: obj.var, new: 'yes' }]; 
o = { test: obj.var, new: 'yes' }; 

obj.var = 'objModified'; 

alert(o.test); // Changes correctly 

obj.var = 'arrModified'; 

alert(a[1].test); 

ist die jsfiddle.

Erwartetes Ergebnis wäre -

erste Alarm - 'objModified' zweite Alarm - 'arrModified'

In meinem Fall, bekomme ich immer 'Initiale'.

Antwort

0

Ich denke, was Sie tun möchten, übergeben ist die Objektreferenz

var obj = { var: 'initial' }; 
var a = [{ test: 'old', new: 'no' }, { test: obj, new: 'yes' }]; 
var o = { test: obj, new: 'yes' }; 

obj.var = 'objModified'; 

alert(o.test.var); // Changes correctly 

obj.var = 'arrModified'; 

alert(o.test.var); 

Aktualisiert Geige: https://jsfiddle.net/echonax/009kqqrt/2/

Wenn Sie die Zeichenfolge Referenz wie, übergeben test: obj.var da Strings unveränderlich sind, es wird sich nicht ändern .

+0

Okay, also gibt es keine Möglichkeit, den Wert zu ändern, ohne das Objekt mit der Referenz zu übergeben? –

+0

@VdasDorls können Sie über das Array iterieren und manuell ändern – echonax

0

Die Art und Weise Sie schrieb es ein und o Objekte den Wert des obj.var zum Zeitpunkt verweisen, wenn sie erstellt werden.

Alle Änderungen an diesem Wert, nachdem sie erstellt werden, gehen zu propagieren kein und o zu .

Wenn Sie möchten, dass es so funktioniert, müssen Sie den Test Property-Verweis auf ein Objekt machen, anstatt den Wert direkt zu referenzieren.

obj = { var: 'initial' }; 
a = [{ test: 'old', new: 'no' }, { test: obj, new: 'yes' }]; 
o = { test: obj, new: 'yes' }; 

obj.var = 'objModified'; 

alert(o.test.var); // o.test=== obj is true 

obj.var = 'arrModified'; 

alert(a[1].test.var); // a[1].test=== obj is true 
0

Wenn Sie das Array a und das Objekt erstellen o werden die Eigenschaften test mit dem Wert eines einfachen String-Variable initialisiert werden „als Wert“ so ihre Werte gespeichert.

obj = { var: 'initial' }; 
a = [{ test: 'old', new: 'no' }, { test: obj.var, new: 'yes' }]; 
o = { test: obj.var, new: 'yes' }; 

Wenn Sie initialisieren, das mit einer Objektreferenz, wie folgendes Beispiel:

var obj = { var: 'initial' }; 
 
a = [{ test: 'old', new: 'no' }, { test: obj, new: 'yes' }]; 
 
o = { test: obj, new: 'yes' }; 
 

 
obj.var = 'objModified'; 
 
console.log(o.test.var); 
 
obj.var = 'arrModified'; 
 
console.log(a[1].test.var);

Man konnte sehen, dass ihr Wert geändert wird, wenn das referenzierte Objekt geändert wird, das ist, weil ihr Wert wird als Referenz gespeichert.

Ich hoffe, es war klar, tschüss.

Verwandte Themen