Neue Objekte erzeugen

Übersicht zu Objekte auf w3schools.com Statische Methoden des Object- Funktionsobjektes

Objekte werden in JavaScript mittels des Object - Funktionsobjektes erzeugt. Die Syntax der Objekt- Instanziierung ist vielfältig:

  1. var obj = Object.call(null) - Allgemeine Objektkonstruktorfunktion als Funktion aufrufen
  2. var obj = new Object() - Allgemeine Objektkonstruktorfunktion aufrufen über new- Konstruktoridiom
  3. var obj = {} - Anlegen mittels Objektliteral
  4. var obj = Object.create(Object.prototype) Anlegen mittels allgemeiner Klassenfabrik
Das Egebnis ist in allen vier Fällen das gleiche, folgende Grafik veranschaulicht es:

Jedes neue Objekt verweist über seine geschützte Eigenschaft __proto__ auf ein sog. Prototypenobjekt. Dies ist in allen hier gezeigten Fällen das Objekt, auf welches die Eigenschaft Object.prototype des objekterzeugenden Funktionsobjektes verweist. Im Prototype- Objekt können Eigenschaften und Methoden hinterlegt werden, die alle Objekte gemeinschaftlich nutzen. Werden mit einem Funktionsobjekt viele Objekte erzeugt, dann ergibt sich durch die implementierung von Methoden im Prototypen eine Speicherplatzersparnis.

Dictionarys als Objektliterale und die Rolle von this

Die untypisierte Sprache JavaScript kennt naturgemäß keine Klassendeklarationen. Dafür verfügt sie über eine sehr flexibele Syntax für Dictionarys, welche die Grundlage von Objekten in JavaScript sind. So werden in Dictionarys die Schlüsseln zu Eigenschaften und Methoden, indem ihnen primitive Werte, Arrays und Einsprungadressen von Funktionen zugewiesen werden.

this ist eine versteckter 1. Paramater in der, dem Schlüssel R zugewiesenen Funktion. In ihm wird beim Aufruf vom Laufzeitsystem automatisch die umgebende Dictionary eingesetzt.

Präzise Deklaration von Eigenschaften mittels Object.create(...) und Object.defineProperty(...)

Ab ECMA5 können bei der Definition von Eigenschaften mittels Object.create() zusätzliche Attribute festgelegt werden wie:

value: true/false
Initialwert einer Eigenschaft. Kann auch eine Funktion sein -> Methode wird definiert
writable: true/false
Eigenschaft ist nur lesbar (konstant), j oder nein
configurable: true/false
Sind die Attribute einer Eigenschaft veränderbar, ja oder nein
enumarable: true/false
Eigenschaft wird in einer for...in Schleife aufgelistet, oder von JSON.stringify mitberücksichtigt.
get: function(){...}
Funktion, die aufgerufen wird, um für den lesenden Zugriff einen Wert zu berechnen
set: function(value){...}
Funktion, die beim schreibenden Zugriff aufgerufen wird, und den zu schreibenden Wert entgegtennimmt.
Siehe @Html.ActionLink("mk-prg-net/CanvasPainter/Geometry/Point.js", "showView", new { controller = "MkPrgNetTests", viewName = "CanvasPainterBasicsTest" })

JSON

JavaScript- Objekte sind mittels JSON.parse und JSON.stringify- Methode einfach zu serialisieren in das JSON Format.

Die Serialisierung eines Objektes mittels JSON.stringify kann beeinflusst werden, indem dem Objekt eine toJSON() Methode spendiert wird. Diese sollte ein JavaScript- Objekt zurückgeben, welches die gewünschte Struktur hat. JSON.stringify ruft beim Serialisieren diese Methode auf, falls vorhanden. (Siehe lineTo-Scriptbefehl in CanvasPainter)

Achtung: Hat ein Objekt einen Prototypen, dann werden dessen Eigenschaften beim serialisieren nicht berücksichtigt. Abhilfe kann hier wieder die toJSON Methode schaffen.

Objekt mit definiertem Prototypen erzeugen

Seit ECMA 5.1 gibt es die Funktion Object.create(Prototype), mittels der Objekte erstellt werden können, die einen explizit definierten Prototypen besitzen. Dies ist die Basis für die sog. prototypische Vererbung.