Hallo,
Hallo Mathias, zonk,
Primitive Werte »haben« genauso Methoden insofern, dass sie intern ständig in die entsprechenden Objekte »umgewandelt« werden.
Das hatte ich bei der Antwort von Tim anders verstanden (Stichworte: eigene toString()-Methoden, toPrimitive()).Vielleicht hab ich mich da missverständlich ausgedrückt. ToPrimitive, ToString, ToBoolean sind Hilfs-Funktionen innerhalb des ECMAScript-Interpreters. Manchmal rufen diese bei Objekten deren tatsächlich in JS definierte Methoden auf. Bei primitiven Werten jedoch nicht.
Ja, so hatte ich es verstanden. Ich fasse das mal zusammen: Diese von Dir genannten Funktionen können durch eigene Funktionen "überschrieben" werden. Dabei werden sie nicht wirklich intern überschrieben, weil erstens der Interpreter ein kompiliertes Programm ist, was nicht mal eben von Skripten in Teilen geändert werden kann, und weil zweitens das bei manchen Methoden auch gar keinen Sinn machen würde. Wenn es möglich wäre, die interne valueOf()-Methode für (primitive) Zahlen zu überschreiben, würde sich der Datentyp selbst aufheben, der nun mal als acht Byte im Fließkommaformat gespeichert wird und nicht mal eben von einem Skript durch Änderung von valueOf() kurzerhand in einen String mit fatalen Folgen geändert werden kann. Number-Objekte nutzen die interne valueOf-Methode() primitiver Zahlen, solange sie nicht durch im Skript deklarierte valueOf-Methoden ersetzt werden, was dort problemlos möglich ist, weil nicht die komplette Funktionsfähigkeit des Interpreters dadurch außer Kraft gesetzt wird, wie es bei Änderungen an der valueOf()-Methode primitiver Datentypen der Fall wäre.
Ich habe daher die Vermutung, primitive Datenwerte werden bei der Verarbeitung nicht in entsprechende Objekte umgewandelt, sondern sie nutzen dieselben internen Routinen wie die Objekte. Für Objekte kann man sie durch eigene ersetzen (nicht überschreiben!), für primitive Datentypen nicht oder nur zum Teil. Wenn für ein Numberobjekt neue Methoden definiert werden, können primitive Zahlen darauf zugreifen, werden dabei aber nicht wirklich in Numberobjekte umgewandelt.
Nein, jeder Function-Scope hat sein eigenes arguments-Objekt, siehe Link im letzten Posting.
Wenn das gar nicht standardisiert ist, kann man eigentlich keine Aussagen darüber machen. In JScript, nur als Beispiel, könnte es ja ganz anders sein.Im ECMAScript-Standard ist genau definiert, dass diese nur ein einem eigenen Exekutionskontext existierten. Wie der jeweils lokale Stack genau umgesetzt ist, nicht. arguments existiert nur in diesem lokalen Scope.
Also so wie meinte: Für Skripte ist die Sichtbarkeit standardisiert. Die lokalen Variablen existieren im Kontext einer Funktion, solange diese ausgeführt wird. Wie das intern gehandhabt wird (lokale Variablen existieren dauerhaft oder auch nicht, sie werden als Arrays, Objekte, in einem Heap oder sonstwie gespeichert, ist Sache des Interpreterentwicklers)?