Tim Tepaße: Typecasting und Prototypen von Objekten

Beitrag lesen

Hallo zonk,

Ähnlich ist es hier:

Ich versuch's mal auch hier zu erklären, vorsicht Vorkenntnis erfordlich. ;)

Number.prototype.toString = function(){
return 1000;
};
z1 = new Number(10);

z1 ist ein Number-Objekt.

z2 = 10;

z2 ist ein Wert vom Typ Number.

alert(z1);  // ist 1000

alert() ruft (vermutlich) die interne Methode ToString auf. Für das Number-Objekt ruft diese die interne Methode ToPrimitive mit dem Hint String auf was irgendwann dann in einem Aufruf Deiner toString-Methode landet.

alert(z2);  // ist 10

Für einen Wert vom Typ number hingegen wird aus der internen Funktion ToString die interne Routine zum Umwandeln von Zahlen in Strings aufgerufen, spezifiziert als ToString Applied to the Number Type. An keiner Stelle wird dieser Number-Wert in ein Number-Objekt umgewandelt, dessen toString-Methode genutzt werden könnte.

Manchmal glaube ich, diese Trennung zwischen primitiven Werten und Objekten richtet mehr Schaden an, als sie gutes tut.

f1 = new Function("");
function f2(){}

Functions sind immer Objekte, egal wie deren Erstellung notiert wird.

Scheinbar haben primitive Zahlen eigene toString-Methoden!?

Ja.

Tim