Original geschrieben von .marc
Ich verstehe ehrlich gesagt denn Sinn deines Beispieles nicht, aber vielleicht hab ich wiedermal alles missverstanden. Das du zwei unterschiedliche Werte erhälst ist nachdem du einen in der Instanz definiert hast logisch, denn dieser "verdeckt" den Wert im prototypen.
Mit dem Verdecken hast Du Recht, was mein Beispiel zeigen soll / sollte, ist, daß man mit einem String oder Integer noch einigermaßen vernünftig arbeiten kann, ohne daß man alle Instanzen beeinflußt oder Nebeneffekte hat, die zu unerklärlichem Verhalten der Applikation führen. Daß es eigentlich auch nicht korrekt ist, weil es die Sichtbarkeit der Variablen ausnutzt / mißbraucht steht außer Frage (siehe meine Empfehlung sämtliche initialisierungen in einer init Funktion zu erledigen).
Aber tausche doch mal value = true mit value = new array ("xxxx", "yyyy"); aus und setze statt a.value = "222" mal ein a.value [0] = "222" ein und schon hast Du ein Riesenproblem, weil Du jetzt keine Verdeckung hervorrufst (es wird ja keine neue Variable deklariert, sondern eine vorhandene benutzt), stattdessen wird jetzt das zentrale, für alle Instanzen identische Objekt value angesprochen und verändert. So ein Effekt kann gewollt sein, manchmal möchte mal z.B. einen zentralen Instanzenzähler oder globale Speicher haben, aber i.d.R. ist die Anwendung eher begrenzt und meist unerwünscht. Wenn man nicht daran denkt oder es nicht weiß, wird man sich wundern, was in seinem Programm denn falsch läuft....

Original geschrieben von .marc
Ausserdem _kannst_ du String, Number und Boolean genauso wie Object und Array auch mit new instanzieren. var myString = "bla" ist also das Selbe wie var myString = new String("bla") genau wie myObject = {}; identisch mit myObject = new Object(); ist, so vermute ich es zumindest aber vielleicht kennst du ja einen Unterschied?
Klar kannst Du jeden Datentyp in JS mit New anlegen, letztendlich ist die einfache Zuweisung nur die Kurzform dafür, aber es ändert sich nichts an diesem Verhalten, denn es gibt für String, Number oder Boolean keine Funktion, die das Objekt selbst ändert (zumindest fällt mir grade keine ein). Wenn es eine gibt, oder man durch seine eigenen Erweiterungen selbst eine schreibt (indem man z.B. die String Klasse erweitert), dann wird vermutlich der gleiche Effekt eintreten, den wir jetzt bei Arrays und Objekten haben.

Original geschrieben von .marc
Wegen dem super hab ich ein bisschen rumprobiert, kann aber sein das folgendes kompletter Schwachsinn ist, also bitte korrigieren
also gut, dann muß ich doch mal genauer nachgraben mit dem super:
PHP-Code:
test.prototype = new Obj ();
test.prototype.constructor=test;
test.prototype.parent Obj.prototype;
...
test.prototype.someFunc = function()
{
    
this.parent.someFunc.call(this);
    
// other stuff

dieser Ablauf kommt am ehesten hin... ist zwar ein wenig aufwändig und man muß immer dran denken, aber so scheint es am praktikabelsten


Original geschrieben von .marc
[ot /] Warum darf man Posts im FAQ - Forum nicht editieren?
keine Ahnung, bei mir gehts