Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

OOP mit JavaScript Grundkurs

Fixierung von Objektstruktur und -inhalten

Testen Sie unsere 2013 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
In den üblichen OOP-Sprachen kann man mit Schlüsselworten wie final oder sealed Klassen, Objekte, Methoden oder Inhalte vor Änderungen schützen. Die in JavaScript im Regelfall völlig dynamische Struktur eines Objekts in Form einer Hash-Liste kann bei Bedarf ebenfalls in verschiedener Hinsicht fixiert werden.
09:55

Transkript

Eine Objektstruktur in JavaScript ist in der Regel vollkommen dynamisch, das heißt, Sie können ein Objekt beliebig erweitern um Eigenschaften, indem Sie einfach einen neuen Bezeichner sich ausdenken, dem Objekt hinzufügen, und schon ist die Objektstruktur erweitert. DAs möchte man nicht in jedem Fall haben. In üblichen objektorientierten Sprachen kann man mit den Schlüsselworten "final" oder "sealed" Dinge als fertig kennzeichnen. Klassen, Objekte, Methoden oder auch Inhalte. Wir werden in diesem Video sehen, dass in JavaScript ähnliche Dinge durchgeführt werden können. Und zwar mit Strukturen, Techniken, die über "object" zur Verfügung gestellt werden. Ich habe hier eine Webseite in der ich neben einem Stylesheet, was keine wirkliche Relevanz hat, zwei Skriptdateien einbinde. Einmal gibt es die "util. js". Und hier ist nicht mehr als eine Funktion deklariert, die die Struktur eines Objektes ausgibt. Das heißt, Sie sehen jeweils hat sich ein Objekt verändert. Was sind die Eigenschaften, Methoden des Objektes, was hier als Parameter übergeben wird? Mehr macht diese Funktion hier nicht. In der anderen Datei finden die interessanten Dinge statt. Sie sehen, dass es hier zwei Objekte gibt. Einmal ein Objekt, was mit JSON-Notation erzeugt wird und eines mittels einer klassischen Konstruktor-Methode, einer Konstruktor-Funktion und diese wird über "new" instanziiert. Also von daher haben wir hier zwei Objekte. Deren Struktur gebe ich erstmal aus und es dürfte keine Überraschung sein, dass dann die Eigenschaften "breite", "farbe" und "fliegen" für das erste Objekt auftauchen und "farbe" und "fliegen" für das zweite Objekt. Bitte beachten Sie: Ich habe hier Eigenschaften gesagt wo das hier natürlich Methoden sind. Aber das ist kein Widerspruch, auch keine Ungenauigkeit, denn hier werden ja mit Funktionsreferenzen im Grunde auch eigentlich nur Eigenschaften deklariert. Key-Value-System einer Hashliste. Das hier ist die Ausgabe von dem einen Objekt und das hier ist die Ausgabe von dem anderen Objekt, genauer genommen den Eigenschaften darin. So wie wir es gerade besprochen haben. Nun stellt "object" drei interessante Methoden zur Verfügung, um Objektstrukturen zu schützen gegen Veränderungen. Und zwar heißen die Methoden "seal" - versiegeln, "freeze" - einfrieren und "prevent extensions" - vor Erweiterung schützen. Mit ebenfalls verfügbaren Methoden von "object" "isExtensible", "isSealsed", und "isFrozen" können Sie überprüfen, - was auch immer das jetzt bedeutet, diese Methoden anzuwenden - ob ein entsprechender Zustand mittels dieser Methoden gesetzt wurde. Und wenn wir nochmal in die Ausgabe hineinschauen, dann sehen wir für beide Objekte die Werte "true, false, false". Und das bedeutet, das Objekt ist erweiterbar, - ja, ja - es ist nicht versiegelt und es ist nicht eingefroren. Die Zustände für beide Objekte sind also bisher in dem Skript identisch. Das bedeutet, ich kann ein Objekt erweitern, um eine Eigenschaft. Das sehen Sie hier beispielsweise "obj1.form= Rund" Einfach als Anweisung notiert erweitert dynamisch die Objektstruktur von "obj1". Das sehen Sie hier an dieser Ausgabe. Das hier ist der neu hinzugefügte Wert, neu hinzugefügte Eigenschaft im Objekt. Sie können das hier mit dieser Ausgabe oben vergleichen. Wenn man nun "Object.preventExtensions" auf ein Objekt anwendet, kann das Objekt nicht mehr um weitere Einträge erweitert werden. Das heißt diese Liste aus Key-Values kann nicht erweitert werden. Hier fixieren wir sozusagen das Objekt gegen eine Erweiterung, wir schützen es. Danach versuchen wir eine weitere Eigenschaft - "material" - hier hinzuzufügen und schauen uns danach noch einmal die Objektstruktur an. Und das hier ist die Ausgabe und Sie sehen, da ist eben keine Eigenschaft "material" hinzugekommen. Es gab auch keinen Laufzeitfehler. Es kann einfach nicht mehr erweitert werden, das Objekt. Das bedeutet allerdings nicht, dass nicht Eigenschaften noch weiter geändert werden können. Vorhandene Eigenschaften können jederzeit verändert werden. Sie sehen hier, dass der Wert der Eigenschaft "farbe" jetzt "Gelb" ist. Und das wurde hier gemacht und danach wird die Objektstruktur wieder ausgegeben. Nun versuchen wir die Objektstruktur zu verringern, zu verkleinern. Das heißt, wir wollen Eigenschaften löschen. Das kann man mit "delete" im Allgemeinen machen. Und wir werden sehen, dass das funktioniert. Denn hier taucht jetzt keine "breite" mehr auf. Das heißt, das Schützen gegen Erweiterung was ja auch der Name schon deutlich macht, verhindert nicht, dass vorhandene Eigenschaften gelöscht werden können. Aber auch das kann man machen. Das macht man mit "Object.seal". Und hier wird das Objekt versiegelt. Danach soll die Eigenschaft "farbe" gelöscht werden und wir schauen uns wieder die Objektstruktur an. Und hier sehen Sie, dass die Eigenschaft "farbe" aber weiter vorhanden ist, obwohl das "delete" versucht wurde. Mit "seal" habe ich also das Objekt, die Struktur versiegelt. Und zwar gegen das Streichen, das Löschen von Attributen, Methoden, aber auch die Erweiterung wird damit ebenfalls verhindert. Es ist also sozusagen "preventExtensions" inkludiert. Allerdings können weiter die Werte von Eigenschaften des Objekts geändert werden. Mit "freeze" hingegen kann man ein Objekt auch bezüglich der Werte einfrieren. DAs mache ich hier. Hier soll eine neue Eigenschaft "gewicht" hinzugefügt werden. Und danach soll eine vorhandene Eigenschaft "farbe" im Wert geändert werden. Sie sehen, dass weder eine Eigenschaft hinzugefügt wurde, noch der Wert von "farbe" geändert wurde. Nun können Sie gerade in Hinsicht auf "freeze" natürlich argumentieren, dass wir vorher bereits versiegelt haben. Deswegen nutze ich hier noch einmal "freeze" auf das Objekt 2 und versuche damit eine Erweiterung um eine Eigenschaft, ein Löschen einer Eigenschaft, und ein Ändern des Wertes einer Eigenschaft durchzuführen. Aber Sie sehen hier, dass der Originalzustand des zweiten Objektes weder durch "delete" noch das Hinzufügen einer Eigenschaft noch das Ändern eines Wertes einer Eigenschaft sich ändert. DAs Objekt ist bezüglich seiner Struktur und der Inhalte eingefroren. Die nachträglichen Ausgaben zeigen hier wieder, ob ein Objekt erweiterbar ist - natürlich nicht mehr - und ob es eingefroren oder versiegelt ist. Und das ist beides der Fall. Sowohl für das Objekt 1 als auch das Objekt 2. Sie haben also in diesem Video gesehen, dass es abgestufte Ebenen gibt, wie man eine Objektstruktur einfrieren, fixieren kann. Die sozusagen kleinste Möglichkeit, die geringste Fixierung, ist indem man die Erweiterung eines Objektes verhindert. Das Versiegeln schützt auch gegen das Löschen, inkludiert aber immer den Schutz gegen die Erweiterung. Und das Einfrieren friert die gesamte Objektstruktur aber auch die Inhalte ein.

OOP mit JavaScript Grundkurs

Sehen Sie, wie Sie mit JavaScript objektorientiert programmieren können.

3 Std. 8 min (35 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:09.03.2017

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!