molily: Typecasting und Prototypen von Objekten

Beitrag lesen

Hallo,

Sehe ich das richtig, primitive Werte haben interne Funktionen, Objekte hingegen Methoden?

Die Frage verstehe ich nicht.

Wie ist es bei Eigenschaften?

Z.B.

a = ["Ein", "Array"];
L = a.length;

Ist length wirklich eine Eigenschaft von a (auf die man nur bei for-in keinen Zugriff hat)?

Ja, klar.

Was sind lokale Variablen oder das Array arguments bei Funktionen?

Lokale Variablen hängen an einem internen »lokale Variablen«-Objekt, auf das man aber nicht direkt zugreifen kann. arguments ist eine solche »lokale Variable«.

Die Frage ist überhaupt, wozu es die Objekte String, Number, Function und Boolean geben muß, noch dazu wenn sich deren Handling von den primitiven Datentypen unterscheidet!

Mein Standardspruch: Objekte haben Identität, Primitives keine.
Objekte sind nur mit sich selbst identisch und somit unvergleichbar (Objekt == AnderesObjekt ergibt immer false, Objekt1 === Objekt2 sowieso). Das Objekt wird behandelt, als ob sein Wert komplex wäre. Bei der Übergabe an Funktionen werden sie deshalb nicht einfach kopiert, sondern immer als Referenz übergeben.
Dieses Verhalten *kann* erwünscht sein, daher kann man Strings und Numbers auch als Objekte anlegen. Außerdem ist die Unterscheidung Primitives vs. Objects bei String, Number und Boolean auch nötig, um intern die prototypische Vererbung und andere Features umzusetzen. Ein Primitive verhält sich ja in vielen Kontexten wie ein Objekt.

Noch mal zur Frage, welchen Status lokale Variablen haben. Sind es (statische oder temporäre) Eigenschaften des Funktionsobjekts zu denen man nur während der Ausführung Zugriff hat (und dann auch nicht über die Objektoperatoren . und []),

Nein. Globale Variablen sind window-Eigenschaften, lokale sind Eigenschaften eines internen Objektes.

oder sind es reine Datenbereiche, die vom Interpreter in einem Stack verwaltet werden?

Siehe oben. Variable Instantiation

Mathias