Ich versuche den Unterschied zwischen dem Schreiben von m = Number()
(was bewirkt, dass typeof m
als "number"
bewertet) und m = new Number()
zu verstehen (was dazu führt, dass typeof m
als "object"
ausgewertet wird).
Ich hätte erwartet, dass es in jedem Fall ein object
ist. Ich habe gerade herumgespielt, und ich habe eine .helloWorld()
-Methode zum Number
-Prototyp hinzugefügt, und ich konnte auf m
zugreifen, unabhängig davon, welche Methode ich verwendet habe, um sie zu instanziieren.
Was ist der Unterschied hier? Was mache ich anders beim Schreiben von Number()
und new Number()
? Warum ist eins object
, während das andere number
ist?
Number()
selbst gibt ein primitives Element zurück. Wenn Sie new Number()
aufrufen, erhalten Sie eine neue Instanz eines Objekts, das Number
s ( relevante ES5-Spezifikation ) darstellt ).
Wenn Sie eine Eigenschaft auf einem Primitiv aufrufen, wird die Primitive automatisch (wie in Java) an eine Instanz dieses Objekts gebunden, wodurch Sie helloWorld()
entweder in object
oder number
aufrufen können.
Versuchen Sie dies jedoch;
%Vor% Sie werden sehen, dass das letztere funktioniert, während das erstere nicht funktioniert; In der ersten wird das number
auf eine Zahl autoboxiert, und die Methode bar
wird hinzugefügt (das Objekt). Wenn Sie x.bar()
aufrufen, erstellen Sie eine neue automatisch eingerahmte Zahl, auf der bar
nicht vorhanden ist.
Im letzteren Fall fügen Sie der Number-Instanz eine Methode bar
hinzu, die sich wie jede andere Objektinstanz verhält und daher während der gesamten Lebensdauer des Objekts bestehen bleibt.
So wird es implementiert. Diese bestimmte Konstruktorfunktion gibt, wenn sie ohne new
aufgerufen wird, eine Primitivnummer zurück. Wenn sie mit new
aufgerufen wird, gibt sie die Objektnummer zurück.
Sie können auf Prototypmethoden / -eigenschaften für Grundelemente zugreifen, da JavaScript diese im Hintergrund in Objekte konvertiert, die Prototypmethode aufruft und dann die Objektkopie wegwirft. So können Sie Dinge tun wie:
%Vor% In der zweiten Zeile wird eine Objektkopie des Primitivs erstellt, die length -Eigenschaft des Objekts wird geprüft und anschließend wird die Objektkopie verworfen. myString
bleibt als Zeichenfolgenprimitiv.
Tags und Links javascript object prototype