molily: Grundkonzepte

Hallo,

ich habe heute mal eine ganz dumme Frage:
Was sind für euch die prägenden Konzepte von JavaScript, gerne im Vergleich zu anderen Rechnersprachen und Techniken, 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 jetzt weniger Grundwissen wie »JavaScript steht nicht immer zur Verfügung«, Anwendungsempfehlungen, Grundlagen der Programmierung, Sytaxfragen oder Geschichtliches, sondern 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.:

  • Clientseitige Scriptsprache, läuft im Browser, operiert dort auf Basis eines HTML-Dokuments, hat verschiedene Schnittstellen z.B. zur Beeinflussung der Darstellung via CSS
  • JavaScript ist objektorientiert; es gibt einen standardisierten Kern (ECMAScript), der Rest ist »Client-Side JavaScript« (oder Browser Object Model oder DOM 0) und das W3C-DOM
  • Die Umgebung, in der JavaScript läuft und die grundlegenden Host-Objekte, die dieser entsprechen: das Fenster / das globale window-Objekt, das Dokument / das document-Objekt
  • Der Zugriff auf das Dokument wird über das DOM geregelt, dieses repräsentiert Elemente, Textinhalt und andere Bestandteile des Markups als Knoten, die in JavaScript wiederum als Objekte vorliegen
  • JavaScript-Programme laufen i.d.R. stark ereignisgesteuert, man hängt Handler bzw. Listener an Elemente und andere Objekte an

Jetzt mal als unvollständige Notizliste. 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.

Mathias

  1. Hallo molily,

    nur eine kleine Ergänzung deiner Auflistung, die aber aus meiner Sicht sehr wichtig ist, und die ich bisher nur von Kommandozeilen-Fortran und -C kenne [1]:

    • Javascript läuft Hardware und Sytemsoftwareunabhängig, wenn man von den "kleinen" Browserinkompatibilitäten mal absieht; und das mit einer grafischen Benutzeroberfläche. Ich glaube, dass Javascripte bei 99% aller User laufen, ohne das irgendetwas installiert werden muss. Allenfalls muss Javascript eingeschaltet werden, was aber die allermeisten haben. Noch mehr Möglichkeiten bieten sich, wenn erst einmal VML oder SVG richtig unterstützt werden.

    Gruß, Jürgen

    [1] und von meiner zweiten Lieblingssprache LabVIEW.

  2. Hi,

    ich habe heute mal eine ganz dumme Frage:

    Du hast vor allem eine Frage im Themenbereich JavaScript, das finde ich schon bemerkenswert genug ;-)

    Was sind für euch die prägenden Konzepte von JavaScript, gerne im Vergleich zu anderen Rechnersprachen und Techniken, mit denen man im Web als Anfänger in Kontakt kommt.

    Um Missverständnisse zu vermeiden: Meinst Du JavaScript-Anfänger oder auch Programmier-Anfänger?

    • JavaScript ist objektorientiert;

    Diesen Faktor halte ich für einen der bemerkenswertesten. Für Programmier-Anfänger ist das natürlich nicht so bedeutend; aber wenn jemand bereits die Geheimnisse des OOP erfahren hat, ist ein "JavaScript ist nicht nur function checkForm() { ... }" sicherlich eine wichtige Erkenntnis.

    • Die Umgebung, in der JavaScript läuft und die grundlegenden Host-Objekte, die dieser entsprechen: das Fenster / das globale window-Objekt, das Dokument / das document-Objekt

    Hier würde ich betonen, dass JavaScript im Prinzip auf das Browserfenster reudziert ist, in dem es läuft. Alles, auf was es Zugriff hat, findet in diesem Fenster statt bzw. wurde vom JavaScript aus diesem Fenster heraus gestartet. Objekte wie z.B. window.screen fallen da zwar teilweise raus, tun der Sache aber als Core-Objekte keinen wirklichen Abbruch.

    • Der Zugriff auf das Dokument wird über das DOM geregelt, dieses repräsentiert Elemente, Textinhalt und andere Bestandteile des Markups als Knoten, die in JavaScript wiederum als Objekte vorliegen

    Ein häufiger Fehler im Hinblick auf DOM ist das Verwechseln von HTML-Attributen und Objekteigenschaften. Zwar kann man mit linkelement.href die Ziel-URL genau so auslesen und verändern, wie es mit linkreferenz.get/setAttribute('href') möglich ist; bei optionelement.selected versagt dies aber. Von selbst erstellten Objekteigenschaften will ich gar nicht erst reden, aber noch kurz Event-Handler in den Raum werfen.

    An was denkt ihr da so?

    Mir ist Dein Ziel noch nicht ganz klar geworden. Welchen Zweck verfolgst Du? Spielen z.B. serverseitiges JavaScript und solches in PDF auch eine Rolle?

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes

    1. Hellihello

      Hi,

      ich habe heute mal eine ganz dumme Frage:

      Du hast vor allem eine Frage im Themenbereich JavaScript, das finde ich schon bemerkenswert genug ;-)

      So dachte ich auch.

      • JavaScript ist objektorientiert;

      Diesen Faktor halte ich für einen der bemerkenswertesten. Für Programmier-Anfänger ist das natürlich nicht so bedeutend;

      Mh, ich würde eher meinen, das geht sofort in Fleisch und Blut über.

      Das ist Auto Nummer 1.
      Dies Auto hat die Farbe grün.
      Der Typ dieses Autos ist Hybrid.

      Auto1=new Auto(); Auto1.Farbe="grün"; Auto1.Typ="Hybrid";

      Das wäre auch meiner Sicht intuitiv. Mal schauen, was "meine" Anfänger dazu irgendwann sagen.

      Objekte wie z.B. window.screen fallen da zwar teilweise raus, tun der Sache aber als Core-Objekte keinen wirklichen Abbruch.

      Könntest Du erklären, warum sie das tun - rausfallen und/oder welche Objekte das sonst noch sind?

      Ein häufiger Fehler im Hinblick auf DOM ist das Verwechseln von HTML-Attributen und Objekteigenschaften. Zwar kann man mit linkelement.href die Ziel-URL genau so auslesen und verändern, wie es mit linkreferenz.get/setAttribute('href') möglich ist; bei optionelement.selected versagt dies aber.

      Hier wünsche ich mir für mich mehr Klarheit in der Definition. Ich hätte gesagt, dass hier JS und HTML zwei verschiedene Ausdrücke benuzten. optionelement.selected="true", <option selected="selected">eine Option</option>. "selected" wäre in JS wie in HTML eine Eigenschaft von "option", (leider) mit unterschiedlicher Bezeichnung für "ausgewählt".

      Mir ist Dein Ziel noch nicht ganz klar geworden. Welchen Zweck verfolgst Du? Spielen z.B. serverseitiges JavaScript

      Das lese ich zum ersten Mal irgendwo im Web und hatte bereits seit einiger Zeit im Kopf, warum denn Javascript bzw. Teile davon nicht auf dem Server laufen. Ich dachte, somit könnte man dem Client die Arbeit überlassen, wenn er denn bereit dazu ist, und wenn nicht, mit dem "selben"(!) script auf dem Server alles zusammenbasteln lassen, um alles komplett in (X)HTML zu übergeben. Die Frage, "quäl" ich meine User mit Javascript  stellt sich für mich nicht. Sie lautet in der Theorie aus meiner Sicht auch: biete ich die effizienteste Methode der Datenübertragung an (hier meine ich den Einbau von sich änderndem Inhalt - nicht clientseitig Events natürlich).

      Dank und Gruß,

      frankx

    2. gruss Cheatah,

      Mir ist Dein Ziel noch nicht ganz klar geworden.

      molily wird hoffentlich endlich das unltimative, fachlich
      wirklich korrekte und trotzdem einsteigerfreundliche buch
      zu diesem thema schreiben.

      Welchen Zweck verfolgst Du?

      aufklaerung!, ganz klar ... ach was, das wird ein weckruf.

      Spielen z.B. serverseitiges JavaScript und solches
      in PDF auch eine Rolle?

      das kommt dann im dritten und vierten band fuer die ganz
      harten, denn der vorherige zweite band muss dem *web 2.0
      zeitgeist* tribut zollen.

      ;-) ... 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:]

  3. Hellihello molily

    ich habe heute mal eine ganz dumme Frage:

    (BTW: Was mir nur nebenbei gelegentlich durchs Hirn streift: gehört es zur Nettiquette wie bei Briefen, nicht mit "ich" den OP zu starten?)

    Was sind für euch die prägenden Konzepte von JavaScript, gerne im Vergleich zu anderen Rechnersprachen und Techniken, mit denen man im Web als Anfänger in Kontakt kommt.

    Dies habe ich mich auch schon gefragt, da ich eine von mir erstmal sogenannte HTML-AG an einer Schule betreue und ein zwei mal in den Raum rief, Javascript sei meine "Lieblingssprache". Bei den AG-lern sind einige noch stark unwissend und ich dachte, so könnte ein Entwurf einer Kurzbeschreibung lauten: 1. Der schnellste Weg, eine GUI einzurichten. (1.a s.a. Jürgen - läuft "überall") 2. Fehlerkontrolle per FF 3. Kennt alle Winkel des HTML-Baumes 4. Benutzt eine intuitive Objektsprache 5. Kann in Bezug auf Logik alles, was andere Sprachen auch können. So, ich habe fertig. Grund 1 reicht mit schon. Bei Kids spielt der Browser eine große Rolle im Leben. Den zu "kontrollieren" mag vielleicht für Außenstehende ein markantes Merkmal sein.

    • Clientseitige Scriptsprache, läuft im Browser, operiert dort auf Basis eines HTML-Dokuments, hat verschiedene Schnittstellen z.B. zur Beeinflussung der Darstellung via CSS

    Um mal ein bisschen Haare zu spalten: spricht Javscript nicht direkt die style-Eigenschaften eines HTML-Elementes an? Javascript könnte alles allein, CSS würde für mich script-Element oder externe Datei bedeuten. Da mag ich aber falsch liegen bzw. dies anders definiert sein.

    • Der Zugriff auf das Dokument wird über das DOM geregelt, dieses repräsentiert Elemente, Textinhalt und andere Bestandteile des Markups als Knoten, die in JavaScript wiederum als Objekte vorliegen

    Wobei "Objekte" und "Elemente" für Anfänger vielleicht verwirrend sein mögen.

    In deutsch:
    Das Element mit der ID "Ergebnis" erhält den Wert 14.

    In Javscript:

    document.getElementById("Ergebnis").value=14;

    Erklärt sich eigentlich erstmal von selbst, bzw. ist _im Grunde_ "genau das gleiche".

    • JavaScript-Programme laufen i.d.R. stark ereignisgesteuert, man hängt Handler bzw. Listener an Elemente und andere Objekte an

    Du kontrollierst mit Javascript fast den kompletten Browserraum. Ergänzend hierzu vielleicht: Actionscript ist Javascript sehr ähnlich und wird nicht umsonst verwandt, um die Interaktionen mit einem Trickfilm (Flash) zu definieren.

    Dank und Gruß,

    frankx

    1. Hallo,

      ich habe heute mal eine ganz dumme Frage:

      (BTW: Was mir nur nebenbei gelegentlich durchs Hirn streift: gehört es zur Nettiquette wie bei Briefen, nicht mit "ich" den OP zu starten?)

      wer erzählt denn so einen Unsinn? Wenn die gewünschte Aussage das erfordert oder nahelegt, fange ich einen Satz in jedem erdenklichen Kontext mit "ich" an.

      Javascript sei meine "Lieblingssprache". [...] Der schnellste Weg, eine GUI einzurichten. (1.a s.a. Jürgen - läuft "überall")

      nein, Javascript _modifiziert_ höchstens ein GUI, das anderweitig (z.B. durch HTML) zur Verfügung gestellt wird.

      1. Benutzt eine intuitive Objektsprache

      Intuitiv? Kann ich so nicht nachempfinden. Beispielsweise habe ich nie begriffen, warum die mathematischen Funktionen ohne Not in ein separates Objekt Math verpackt wurden, was die Verwendung umständlich macht, anstatt sie einfach als globale Funktionen zur Verfügung zu stellen.

      Um mal ein bisschen Haare zu spalten: spricht Javscript nicht direkt die style-Eigenschaften eines HTML-Elementes an?

      Das ist zumindest möglich. Aber lange nicht so elegant, wie es CSS kann. Beispielsweise erfordert es mit Javascript erhebliche Verrenkungen, alle Möglichkeiten der Selektion von Objekten nachzubilden, wie es in CSS vorgesehen ist (denk z.B. an den descendant oder den sibling selector). Javascript und CSS können einander deshalb gut ergänzen, aber ich würde sicher nicht sagen, eines könnte das andere ersetzen.

      Wobei "Objekte" und "Elemente" für Anfänger vielleicht verwirrend sein mögen.

      Nicht, wenn man sich von Anfang an die richtigen Bezeichnungen angewöhnt.

      In deutsch:
      Das Element mit der ID "Ergebnis" erhält den Wert 14.

      Und schon bist du aufgefallen. ;-)
      Ein Element mag einen Namen, einen Tag-Namen oder eine ID haben, aber keinen Wert. Eventuell hat es ein Attribut mit dem Namen value, doch hier bewegen wir uns schon auf einer etwas anderen Ebene.

      document.getElementById("Ergebnis").value=14;

      Also eigentlich: Das value-Attribut des Elements "Ergebnis" erhält den Wert 14.

      So long,
       Martin

      --
      Die beste Informationsquelle sind Leute, die jemand anderem versprochen haben, nichts weiterzuerzählen.
        (alte Journalistenweisheit)

  4. Hi molily,

    ich bin zwar kein gelernter Programmierer, sondern komm aus der Konzeption/ Design/ Auszeichnungsrichtung. Aber vielleicht interessiert dich das trotzdem (?):

    • Gerade aus meiner Perspektive würde ich sagen, dass JS an sich und bei moderner Benutzung ganz hervorragend dazu geeignet ist, die allseits geforderte Trennung von Inhalt einerseits und Design/Funktionalität andererseits zu gewährleisten. Und zwar insbesondere im Zusammenspiel mit CSS. (mit moderner Benutzung meine ich z.B. NICHT die auch bei sogenannten "Webagenturen" nach wie vor verbreitete Unsitte, events aus <a> tags zu triggern etc.)

    • die Ähnlichkeit zu Actionscript (mit ECMA zumindest ursprünglich derselbe Kern)würde ich auch als Pluspunkt bewerten. Zumal wenn sich jemand ernsthaft / beruflich mit Webentwicklung beschäftigen will.

    • der große Pluspunkt ("was kann Javascript") ist für mich immer noch -neben oder in Verbindung mit anderen Technologien- Interaktivität herzustellen. Funktional wie auch optisch.

    • die wesentliche programmiersprachliche Eigenschaft ist für mich der clientseitige Ablauf. Die am wenigsten beachtete wohl OOP

    • auf Schwächen würde ich allerdings auch hinweisen (trotz der hohen Verbreitung und Hard-/Softwareunabhängigkeit). Sicherheitslücken und Browserinkompatibilitäten. Das serverseitige Lösungen oft die besseren sind, sollte man bei einer ehrlichen Beurteilung nicht verschweigen, denke ich.

    Gruß
    Antipitch

  5. 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:]

  6. Hallo,

    Jetzt muss ich doch auch noch meinen Senf dazugeben:

    Bis jetzt wurden schon viele interessante Eigenschaften von JavaScript aufgezählt, und insgesamt ergibt sich immer der Eindruck, als sei JavaScript ohne irgendwelche Web-Browser gar nicht existenzfähig. Im deutschen Wikipedia wurde sie einmal ausdrücklich als "web-basierte" Programmiersprache bezeichnet.

    Das ist IMHO aber so nicht (mehr) korrekt. Obwohl ursprünglich für Web-Browser entwickelt, hat Javascript inzwischen auch ausserhalb vom Web weite Verbreitung als Programmiersprache gefunden (z.B. in Adobe Photoshop, InDesign, PDF).

    Das Besondere an JavaScript als Programmiersprache kann also nicht sein, dass es z.B. so toll mit Style-Eigenschaften, HTML-Elementen, oder Events umgehen kann, sondern solche Dinge sind eigentlich nur der API des Browsers bzw. allgemeiner der Applikation zu verdanken, in die JavaScript als Programmiersprache eingebunden wird.

    Tatsächlich verdankt JavaScript sogar seine größte Schwäche nur der Tatsache, dass es ursprünglich für Web-Browser entwickelt wurde (nämlich die defautmäßig globalen Variablen).

    Man hätte auch Visual Basic oder was immer mit Browsern verknüpfen können mit einer entsprechenden API, die Zugriff auf's DOM usw. erlaubt (ist ja meines Wissens auch gemacht worden).

    Was erzählt ihr jemanden, dem ihr JavaScript in seinen paar Grundkonzepten erklären müsst, welche zählt ihr da auf.

    Da würde ich bei der Objektorientierung anfangen, und zwar speziell bei der prototypischen Vererbung, die zumindest mir bei keiner anderen Programmiersprache so begegnet ist. Ich halte dieses Konzept für schlichweg genial. Die klassische Vererbung mit Konstruktoren, Destruktoren usw. ist dagegen richtig umständlich.

    Auch sonst gehe ich mit @peterS konform:

    »lamda-kalkuel« und in diesem zusammenhang dann »rekursion« und »currying« - weniger theoretisch dann auf alle faelle »closure«s

    sind wichtige Besonderheiten, die JavaScript von anderen Sprachen unterscheidet.

    Nicht unbedingt "normal" für eine Programmiersprache ist der lockere Umgang mit Datentypen.

    Gruß, Don P

    1. gruss Don P,

      Bis jetzt wurden schon viele interessante Eigenschaften von JavaScript aufgezählt,
      und insgesamt ergibt sich immer der Eindruck, als sei JavaScript ohne irgendwelche
      Web-Browser gar nicht existenzfähig.

      wenn man es genau naehme, waere es aber tatsaechlich so:

      »Mocha« spaeter umbenannt in »LiveScript« und dann *gebrandet* »JavaScript«
      waren von anfang an gefangene des gesamtsystems "web browser".
      um den originalen sprachkern einigermassen vor microsoftschen kidnapping-/
      erweiterungs-/verstuemmelungs- versuchen zu schuetzen, ueberantwortete man
      ihn schlussendlich der kloesterlichen obhut der ECMA, wo er nun ein von der
      welt abgeschiedenes leben in einer standardzelle mit der nummer 262 fuehren
      muss.

      und deswegen gelten eigentlich folgende formeln:

      "ECMA-262" + browser/client + (w3c-)DOM = »JavaScript«
      "ECMA-262" + Flash IDE (Flash MX 2004 / Flash 8) = »ActionScript 2«

      Im deutschen Wikipedia wurde sie einmal ausdrücklich als "web-basierte"
      Programmiersprache bezeichnet.

      glaub mir, dort spielte sich ein endlos zaehes ringen um einordnung und
      definition dieser sprache ab, und besonders hartnaeckig waren diejenigen
      mit dem frisch erworbenen missionarischen halbwissen.
      es ist ein grosses verdienst von molily, dass er mit ebensolcher ausdauer
      einen vernuenftigen diskussionsstil und einen pragmatisches umgang mit dem
      thema aufrechterhalten konnte - mit der aktuellen version kann man doch
      ganz zufrieden sein.

      Das ist IMHO aber so nicht (mehr) korrekt. Obwohl ursprünglich für
      Web-Browser entwickelt, hat Javascript inzwischen auch ausserhalb vom
      Web weite Verbreitung als Programmiersprache gefunden (z.B. in Adobe
      Photoshop, InDesign, PDF).

      ... und das sind noch nichtmal alle. der umgangssprachlich etablierte
      begriff »JavaScript« wird in zukunft wohl fuer fast alle anwendungen
      mit einer kombination aus ECMAScript-sprachkern und API-xyz entlehnt
      werden. spannend zu sehen, ob es (konkurierende) versuche geben wird,
      die deutungshoheit ueber diesen begriff zu erlangen.

      Das Besondere an JavaScript als Programmiersprache kann also nicht
      sein, dass es z.B. so toll mit Style-Eigenschaften, HTML-Elementen,
      oder Events umgehen kann, sondern solche Dinge sind eigentlich nur
      der API des Browsers bzw. allgemeiner der Applikation zu verdanken,
      in die JavaScript als Programmiersprache eingebunden wird.

      Da würde ich bei der Objektorientierung anfangen, und zwar speziell
      bei der prototypischen Vererbung, die zumindest mir bei keiner anderen
      Programmiersprache so begegnet ist.

      z.b.: »Self« (prototypenbasierte objektorientierung + dynamisch typisiert)

      Ich halte dieses Konzept für schlichweg genial.

      ich finde es sogar sexy.

      Auch sonst gehe ich mit @peterS konform:

      »lamda-kalkuel« und in diesem zusammenhang dann »rekursion« und...

      ---------^ typo! da hab ich mich vertippt: »lambda-kalkuel«

      ...»currying« - weniger theoretisch dann auf alle faelle »closure«s.

      sind wichtige Besonderheiten, die JavaScript von anderen Sprachen unterscheidet.

      ... und die es wiederum mit »Lisp« gemeinsam hat.

      Nicht unbedingt "normal" für eine Programmiersprache ist der lockere
      Umgang mit Datentypen.

      warum, »Smalltalk«, das vorbild aller moderner objektorientierung, _ist_
      dynamisch typisiert. dieser "lockere Umgang mit Datentypen", wie Du es
      nennst, hat mindestens genausoviel sexappeal wie die klassenlose oo.

      vorweggenommene antwort auf ein vermutetes vorurteil:

        erfolgreiches *durchkompilieren* von code, aufgrund stimmiger typen
        (compiler und (strenge) typisierung scheinen einander zu bedingen),
        garantiert fuer genau gar nichts. das A und O ist professionelles testing.

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

  7. Hallo molily,

    Ich finde wichtig, dass Javascript erstmal nicht typisiert ist, und man also prinzipiell alles an jede Funktion übergeben kann (selbst Funktionen, welche alle als Objekte behandelt werden).

    Jonathan

    -- Selfcode: ie:( fl:{ br:> va:) ls:& fo:) rl:? ss:} de:> js:| ch:? mo:} zu:)