Beachten Sie Folgendes:Ein Objekt erzwingen, das in Erinnerung ist, um auf ein anderes Objekt zu zeigen?
var obj1 = {"value":"one"};
var obj2 = obj1;
console.log(obj2.value+"\n"); // prints "one"
obj1 = {"value":"two"};
console.log(obj2.value+"\n"); // still prints "one"
Ich verstehe den Grund dafür, in den ersten beiden Zeilen, obj1
und obj2
sind Referenzen die beide auf das gleiche Objekt, {"value":"one"}
, irgendwo im Speicher. Wenn obj1
einem anderen Objekt zugewiesen ist, zeigt {"value":"two"}
, obj2
immer noch auf das gleiche Objekt {"value":"one"}
im Speicher.
Was ich suche ist eine Möglichkeit, das {"value":"one"}
Objekt im Speicher zu "umleiten" seine Anrufer auf das {"value":"two"}
Objekt. Mit anderen Worten, ich bin nach einer Möglichkeit, das {"value":"one"}
Objekt, so dass die obj2
Variablen letztlich Punkt würden das {"value":"two"}
Objekt, ohne die Neuzuweisung den obj2
Variable zu manipulieren:
var obj1 = {"value":"one"};
var obj2 = obj1;
console.log(obj2.value+"\n"); // prints "one"
// ...some code to manipulate the `{"value":"one"}` object in memory
// so that *any* references which originally pointed to the
// `{"value":"one"}` object now point to the `{"value":"two"}`
// object, like a sort of "redirection". This would be done
// without ever explicitly reassigning the references.
console.log(obj2.value+"\n"); // now prints "two"
Gibt es eine Möglichkeit, dies zu erreichen?
Die eigentliche Anwendung beinhaltet einige ziemlich komplexe Mozilla-Code, die diesen Thread zu versuchen und zu erklären belasten würde, so frage ich dies als eine allgemeine Theorie Frage.
EDIT: FAZIT:
„Nein“ ist die richtige Antwort auf die eigentliche Frage, torazaburo Kommentar unterhalb Staaten wohl. Aber ich fühlte, dass Patrick's Antwort, die einen Proxy benutzt, dem am nächsten kommt, also akzeptierte ich seine Antwort. Ich werde hinzufügen, dass, während Proxies sehr mächtige Werkzeuge sind, sie nicht die gleichen wie das eigentliche Zielobjekt sind, und es gibt einige Einschränkungen.
Dies ist eine grundlegende Frage der Objektidentität. Ein Objekt ist es selbst und wird es immer sein. Es kann andere Lösungen für Ihr zugrunde liegendes Problem geben, aber das Ändern der Identität eines Objekts im laufenden Betrieb - das Austauschen eines Objekts unter sich selbst - gehört nicht dazu. –
ist es einfach, 'console.log (obj2(). Value +" \ n ");' wie beschrieben zu erhalten. Sie könnten einen Getter oder Proxy verwenden, um die Parens zu vermeiden .... – dandavis