Ich habe gerade von den JavaScript-Methoden freeze
und gehört seal
, mit denen jedes Objekt unveränderlich gemacht werden kann.
Hier ist ein kurzes Beispiel für die Verwendung:
var o1 = {}, o2 = {};
Object.freeze(o2);
o1["a"] = "worked";
o2["a"] = "worked";
alert(o1["a"]); //prints "worked"
alert(o2["a"]); //prints "undefined"
Was ist der Unterschied zwischen freeze
und seal
? Können sie die Leistung steigern?
javascript
ecmascript-5
Maja
quelle
quelle
Object.preventExtensions
zusätzlich zuObject.seal
undObject.freeze
.Object.preventExtensions
verhindert nur, dass einem Objekt neue Elemente hinzugefügt werden. Sie können die Werte von Eigenschaften für Objekte löschen, konfigurieren und ändern, deren Erweiterbarkeit deaktiviert wurdeObject.preventExtensions
.Antworten:
Object.seal
delete
gibt false zurückwritable
Attribut ändern können und ihrvalue
Attribut wennwriteable
wahr ist).TypeError
auslösen, wenn versucht wird, den Wert des versiegelten Objekts selbst zu ändern (am häufigsten im strengen Modus ).Object.freeze
Object.seal
, plus:Keiner von beiden betrifft 'tiefe' / Enkelobjekte. Wenn z. B.
obj
eingefroren ist,obj.el
kann es nicht neu zugewiesen werden, aber der Wert vonobj.el
kann geändert werden, zobj.el.id
. B. kann geändert werden.Performance:
Das Versiegeln oder Einfrieren eines Objekts kann je nach Browser die Aufzählungsgeschwindigkeit beeinträchtigen:
Tests: Versiegelte Objekte , Gefrorene Objekte .
quelle
seal
auch vorhandene Eigenschaften nicht konfiguriert werden, siehe jsfiddle.net/btipling/6m743whn Nummer 2, die Sie weiterhin bearbeiten können, dh die Werte vorhandener Eigenschaften für ein versiegeltes Objekt ändern.onClick
oder hinzuzufügen,onlick
und sich gefragt, warum dies nicht funktioniert. Wenn JavaScript einen Fehler auslöst, ist dies eine Sache weniger, die falsch ist. Zweitens können Sie so konstante Eigenschaften für ein Objekt implementieren, die Änderungen verhindern. Dies ist besonders nützlich bei Objektmethoden.