In diesem Beispiel wird ein Objekt erstellt, eingefroren und anschließend ein neues Objekt aus dem eingefrorenen Objekt erstellt. Wenn das zweite Objekt versucht, die Testeigenschaft zu ändern, kann es nicht. Es bleibt eingefroren mit dem ersten Objekts Wert von 10.Erstellen von neuen Objekten aus eingefrorenen übergeordneten Objekten
//Create an object and freeze it
var first = {
test: 10
};
Object.freeze(first);
//Create a second object from the first one and
//try and change the new test property (you can't)
var second = Object.create(first);
second.test = 20;
console.log(second.test); //10
Hier sind meine Fragen:
Ist second.test
eine neue Eigenschaft an einem neuen Objekt, oder ist es nur ein Verweis auf die Eigenschaft im gefrorenen erstes Objekt?
Ist es möglich, den eingefrorenen als Standardwert zu verwenden, aber second.test
überschreiben, wenn es erforderlich ist?
Mein Grund für die Frage ist, weil ich ein Basisobjekt als eine Vorlage mit Standardwerten unveränderlich machen und dann verwenden möchte, um neue Objekte zu erstellen, die ich anpassen kann. Was ist der beste Ansatz dafür?
Danke!
Ziemlich außerhalb Fall, aber beachten Sie, dass dies immer noch nicht funktioniert, wenn das eingefrorene Objekt Verweise auf andere eingefrorene Objekte enthält, und Sie versuchen, _their_ Eigenschaften zu überschreiben. Immer noch eine ziemlich nützliche Technik für einfache Datenstrukturen, nur niemand kommt auf die Idee, dass es eine narrensichere Möglichkeit ist, immutables zu erstellen. – Dtipson