Pseliger
Intro - Sprachkonzept
Bearbeiten- Versuch, alles unterhalb von »Sprachklassifizierung« noch kompakter zusammenzufassen
- siehe dazu auch den gesamten Thread zu diesem Posting: [1]
Der als ECMAScript (ECMA 262) standardisierte Sprachkern von JavaScript
kann ohne weiteres als Multiparadigmensprache bezeichnet werden. Obwohl
im Grunde eine funktionale Skriptsprache, läßt sich in JavaScript sowohl
prozedural als auch rein funktional bzw. objektorientiert programmieren.
Der als ECMAScript (ECMA 262) standardisierte Sprachkern von JavaScript
beschreibt eine moderne, schlanke, objektorientierte aber klassenlose
Skriptsprache, die dennoch allen objektorientierten Programmierparadigmen
unter anderem auch - aber eben nicht ausschließlich - auf der Basis von
Prototypen gerecht wird.
Obwohl im Grunde eine funktionale Skriptsprache,
läßt sich in JavaScript sowohl prozedural als auch rein funktional bzw.
objektorientiert programmieren.
ECMA 262 kann damit ohne weiteres auch als Multiparadigmensprache bezeichnet werden.
In JavaScript representieren sich alle Daten bis auf die Typen [Undefined] und [Null] bzw. bis auf die primitiven Werte [boolean], [number] und [string] als Objekte. Funktionen sind ebenfalls Objekte, deren im Funktionsrumpf gebundenen Anweisungen über den call-Operator bzw. über call-Methoden ausgeführt werden.
Gekapselte Daten sind lokale Werte bzw. Objekte einer Funktion. Diese begrenzte *Sichtbarkeit* von Daten kann bei Datenstrukturen durch ineinander verschachtelte Funktionen (Funktion in Funktion) gezielt ausgenutzt und über Referenzierungskonzepte ebenso gezielt getunnelt werden.
Schon auf dieser Grundlage läßt sich fuer alle nativen JavaScript-Objekte das Signal-Slot-Konzept implementieren, sodaß ereignisorientiertes Programmieren, auch losgelöst von DOM-Events, allein mit den Mitteln des Sprachkerns möglich ist.
Vererbung wiederum erfolgt in JavaScript ausschließlich über Delegation; entweder direkt über eine der call-Methoden oder implizit über den Objekt- Prototypen eines jeden Objekt-Konstruktors. Letztgenannter leistet dabei die Abstraktion zur Vererbung (im Sinne von *ist ein*), während die zuerst angesprochenen Methoden der Umsetzung des Aggregationskonzepts (*hat ein*) dienlich sind.
Sprachklassifizierung
BearbeitenDer als ECMAScript standardisierte Sprachkern von JavaScript beschreibt eine moderne, schlanke, objektorientierte aber klassenlose Skriptsprache, die dennoch allen objektorientierten Programmierparadigmen unter anderem auch - aber eben nicht ausschließlich - auf der Basis von Prototypen gerecht wird.
Werte, Objekte des Sprachkerns, Objektstrukturen:
Bearbeiten
Daten sind entweder einfache Werte/Primitives, der beiden Typen [Undefined] und [Null] bzw.
Werte/Primitives vom Typ "boolean"
, "number"
und "string"
oder aber Objekte eines bestimmten Datentyps: [Boolean]
-, [Number]
- und
[String]
- sowie [Date]
-, [Error]
- und [RegExp]
-
Objekte.
Komplexere Datenstrukturen lassen sich beispielsweise durch Hinzufügen der eben genannten Objekte
zu [Array]
- und [Object]
- Objekten bzw. durch deren aller Kombination
erzeugen. Funktionen/[Function]
wiederum können solche Daten erzeugen, auf ihnen
arbeiten und sie verändern.
Das zum Sprachkern gehörenden [Math]
- Objekt ist nicht instanziierbar und referenziert
über seinem globalem Namensraum ausschließlich statische Eigenschaften.
Funktionen als Datentypen:
Bearbeiten
Der Rumpf einer jeden Funktion enthält normalerweise Programmcode, der, sobald er ausgeführt wird,
Daten im globalen bzw. in einem objektspezifischen Kontext oder aber auch unmittelbar lokal im
Funktionsrumpf selbst lesen und/oder schreiben kann.
Funktionen können Daten in Form von Argumenten nicht nur entgegennehmen sondern diese auch
zurückgeben.
Funktionen sollten daher wie alles, was nicht ausdrücklich "Wert" in ECMAScript ist, als Objekte
betrachtet werden, deren Datentypen frei programmierbar sind, wobei die Ausprägung eines Typs
jeweils nur beim Aufruf des call-Operators ()
bzw. nur über die call
-
Methode erfolgt.
Funktionen als Konstruktoren von Objekten eines bestimmten Typs:
Bearbeiten
Variablen innerhalb eines Funktionsrumpfes können mit dem Schlüsselwort this
in
spezieller Weise an ihre Funktion gebunden werden. Eine solche Funktion kann als Konstruktor
für immer neue Objekte einunddesselben Datentyps zur Anwendung kommen. Jedes über den
new
- Operator (z.B. als: var obj = new Constructor()
) erzeugte Objekt
wird dadurch Träger eines eigenen von außen zugänglichen Satzes von genau diesen im Konstruktor
vereinbarten Eigenschaften.
Funktionen wurden ja schon als spezielle Objekte beschrieben. Konstruktoren wiederum sind
spezielle Funktionen, die als Blaupausen oder Stanzvorlagen für eine Vielzahl von Objekten
gleichen Typs dienen. Konstruktoren sind prototypische Funktionen.
prototypenbasierte Vererbung
BearbeitenDas Konzept des "Prototyp"s ist die Grundlage jeglicher Vererbung in allen an ECMAScript angelehnten Sprachen. Jeder Konstruktor kann seinen Typ auf der Basis eines anderen, schon existierenden, Objekttyps aufbauen. Dabei werden die Eigenschaften des Basisobjekts vom neu generierten Objekt solange ausschließlich referenziert, bis diese über das neue Objekt erstmals direkt gesetzt wurden.
Traits und Mixins im Artikel JavaScript
BearbeitenHallo Pseliger! Ich musste gerade leider Deine Abhandlung zum Thema Traits und Mixins im Artikel JavaScript verwerfen, da sie dort IMHO fehl am Platze und noch dazu viel zu umfangrech war. Mehr dazu auf der zugehörigen Diskussionseite.
Bei der Gelegenheit fällt mir auf, dass Du Deine Diskussionsseite offensichtlich zum Vorbereiten von Artikeln verwendest?! Dafür ist diese eigentlich nicht gedacht. Leg Dir stattdessen doch einfach eine Unterseite in Deinem Namensraum - z.B.: Benutzer:Pselige/JavaScript