gruss Mathias
Was sind für euch die prägenden Konzepte von JavaScript, ... mit
denen man im Web als Anfänger in Kontakt kommt. Was erzählt ihr
jemanden, dem ihr JavaScript in seinen paar Grundkonzepten erklären
müsst, welche zählt ihr da auf. Ich meine ... Eckpfeiler, die man
zum Verständnis der speziellen Funktionsweise von JavaScript kennen
muss (was kann JavaScript, unter welchen Bedingungen arbeitet es).Mir fallen da natürlich auch einige ein, z.B.:
ich leg auch mal los, ueberschneidungen mit den von Dir genannten
punkten in kauf nehmend:
der begriff »JavaScript« umfasst die dreifaltigkeit aus sprachkern
(ECMAScript), client (Browser/BOM) und Dokument(HTML/(w3c)-DOM).
der browser stellt HTML/XML-dokumente nicht nur dar, sondern eroeffnet
JavaScript die moeglichkeit zur manipulation dieser, indem er die den
dokumenten zugrundeliegende (baum)-struktur als objekt zur verfuegung
stellt.
spaetestens hier muessen die begrifflichkeiten »dokument«, »laufzeit«,
»objekt«, »objektbasiert«, »objektorientiert« und »programmiersprache«
gekleart sein.
anfaengern wuerde ich auch nur die funktionalen aspekte des sprachkerns
zumuten wollen, bevor ich sie dann mit dem konzept der ereignissteuerung
vertraut mache, und sie damit fuer einen einstieg wahrscheinlich auch
schon an die grenzen bringe.
darauf aufbauend sollte man dann schrittweise in die tiefen des BOM/DOM
anhand von einfach gehaltenen imperativen DOM-scripten vorstossen.
werden diese beispiele anspruchsvoller darf auch gerne darauf hingewiesen
werden, dass man im kontext von DOM-gettern permanent auf listen-strukturen
arbeitet.
... An was denkt ihr da so? Es geht mir darum, in ein paar
Absätzen die Eckpfeiler zu beschreiben, die den Charakter
von JavaScript bestimmen.
wer bereit ist, die kinderstube zu verlassen, muss als erstes die
vielgestaltigkeit des sprachkonzepts erfahren, welches ohne muehe
sowohl imperatives/prozedurales, als auch rein funktionales, wie
auch superflexibles objektorientiertes und eben immer wieder auch
ereignisgesteuertes programmieren ermoeglicht.
die stichworte zum funktionalen aspekt lauten »lamda-kalkuel« und
in diesem zusammenhang dann »rekursion« und »currying« - weniger
theoretisch dann auf alle faelle »closure«s.
durch die vielfaeltigen moeglichkeiten, objektorientiert zu programmieren,
kommt man nicht umhin, sich sowohl mit klassenbasierter oo als auch mit
der auf prototypen basierenden zu beschaeftigen. erstgenanntes kann
JavaScript ganz gut emulieren (, und viele bibliotheken versuchen sich
in der emulation klassenbasierter oo) - letzteres ist bereits eingebaut.
und da sich die evangelikalen verfechter eines jeden lagers immer an der
»vererbung« reiben, sollte darauf hingewiesen werden, dass es auch noch
»schnittstellenvererbung« gibt, zu der es zumindest im kontext dieser
sprache weder »klassen« noch »prototypen« sondern einfach nur »objekte«
braucht. fuer schnittstellenvererbung auf basis von »objektkomposition«
stehen in JavaScript die nativen delegierenden [[Function]]-methoden
[call] und [apply] zur verfuegung.
wobei wir wieder bei funktionen sind, und hier nochmal deren zentrale
bedeutung im sprachkonzept hervorgehoben werden muss.
Funktionen als Datentypen:
im einfachsten fall steht im rumpf einer jeden funktion programmcode,
der, sobald er ausgefuehrt wird, daten im globalen bzw. in einem
objektspezifischen kontext oder aber auch unmittelbar lokal im
funktionsrumpf selbst lesen und/oder schreiben kann.
funktionen koennen daten in form von argumenten nicht nur entgegennehmen
sondern diese auch zurueckgeben.
funktionen sollten daher wie alles, was nicht ausdruecklich "wert" in
ECMAscript ist, als objekte betrachtet werden, deren datentypen frei
programmierbar sind, wobei die auspraegung eines typs jeweils nur beim
aufruf des call-operators »()« bzw. nur ueber die methoden »call« bzw.
»apply« erfolgt.
Funktionen als Konstruktoren von Objekten eines bestimmten Typs:
variablen innerhalb eines funktionsrumpfes koennen mit dem »this«-opereator
in spezieller weise an ihre funktion gebunden werden. eine solche funktion
kann als konstruktor fuer immer neue objekte einunddesselben datentyps zur
anwendung kommen. jedes ueber den »new«-operator erzeugte objekt wird dadurch
traeger eines eigenen von aussen zugaenglichen 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
fuer eine vielzahl von objekten gleichen typs dienen.
konstruktoren sind prototypische funktionen.
... MITTAG! ... ich mach mal schluss ...
so long - peterS. - pseliger@gmx.net
»Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.
Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.« - Douglas Crockford
ie:( fl:) br:> va:( ls:& fo:) rl:| n3;} n4:} ss:} de:µ js:} mo:? zu:]