Hi
Ich weiß nicht, wie Perl da tickt, aber in Python und Ruby, die hinsichtlich Typen mit ECMAScript wohl eher zu vergleichen sind als Java, gibt es m.W. keine Unterscheidung zwischen null und undefined. In Python gibt es None, in Ruby nil.
In Perl gibts nur undef, dass sich so ziemlich so wie undefined in JS verhält, mit der Ausnahme des Typecasting.
repl> undefined+0
NaN
repl> undefined+""
"undefined"
DB<1> $x=undef
DB<2> print $x."666"
666
DB<3> print $x+666
666
In Python hingegen gibts AFAIK keine undefinierten Variablen, weil eine Deklaration immer auch eine Initialisierung beinhaltet.
In ECMAScript halte ich die Aufspaltung in undefined und null für ziemlich willkürlich und eben nur historisch erklärbar. -
D'accord. Aber am willkürlichsten ist wenn Java-Programmierer der Sprache ihre Muster aufzwingen.
Genauso wie z.B. der new-Operator, der eine Analogie zu klassenbasierten Sprachen ist und im funktionalen/prototypischen JavaScript überhaupt nicht gebraucht wird bzw. von dem Leute wie Crockford abraten, weil er die Natur der Sprache mehr verhüllt als offenlegt.
Naja Crockford macht peinliche Fehler in seinem Buch und ist auch launenhaft in seinen Ansichten...der Mann kommt von Java und man merkt seinen Reden an dass er früher mit Scripting auf dem Kriegsfuss stand und m.E. immer noch steht. Aber er verkauft sich gut.
In allen OOP Sprachen die ich kenne gibts einen Container für Methoden und (mindestens) einen Konstruktor der meist new heist.
In JS ist der Konstruktor ne spezielle Funktion und die Methoden werden im Prototype dieser Funktion gehalten.
new leitet ein neues Object von Konstruktor ab, Crockfords "beget" oder "create" Methode oder wie er es gerade nennt aber von einem Objekt dass er zum Prototyp macht und vereinfacht dabei den Konstruktor.
Das hat beides seine Vor und Nachteile, je nachdem was einem gerade wichtiger ist, ein variabler Konstruktor oder variabler Methodencontainer.
Sein Ansatz ist zugegeben intuitiver, weil er Vererbungsketten vereinfacht, aber beide Aspekte zu beachten wäre m.E. besser.
Tschau
Rolf