Benutzer Diskussion:Pseliger

aus Wikipedia, der freien Enzyklopädie
Letzter Kommentar: vor 11 Jahren von Martin Kraft in Abschnitt Traits und Mixins im Artikel JavaScript
Zur Navigation springen Zur Suche springen


Intro - Sprachkonzept

[Quelltext 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

[Quelltext bearbeiten]

Der 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:

[Quelltext 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:

[Quelltext 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:

[Quelltext 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

[Quelltext bearbeiten]

Das 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

[Quelltext bearbeiten]

Hallo 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

--Martin K. (Diskussion) 11:59, 13. Apr. 2013 (CEST)Beantworten