Wie funktioniert der neue Betreiber arbeiten in JavaScript?
Wahrscheinlich die am wenigsten verstandene Teil von JavaScript, stehen neben der Prototyp-Kette.
Also die Frage ist: wie funktioniert...
new dataObj(args);
...eigentlich ein Objekt erstellen, und definieren Sie seine Prototyp-Kette/Konstruktoren/etc?
Besten ist es, zu zeigen, dass alternative, um vollständig zu verstehen das Schlüsselwort.
Irgendwie related: stackoverflow.com/questions/1646698/...
InformationsquelleAutor PicoCreator | 2011-07-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
new
- operator verwendet die interne[[Construct]]
Methode, und es im Grunde genommen die folgenden:[[Prototype]]
dieses Objekts verweist auf die Funktionprototype
Eigenschaft.prototype
Eigenschaft ist nicht ein Objekt (eine primitive Werte, wie Number, String, Boolean, Undefined oder Null)Object.prototype
verwendet.this
Wert.Einer gleichwertigen Umsetzung von dem, was die
new
Betreiber erhebt, ausgedrückt werden kann, wie dies (unter der Annahme, dass die ECMAScript-5Object.create
Methode verfügbar ist):Nein, die
prototype
Eigenschaft ist nur sinnvoll für die Funktion der Objekte, wenn verwendet, wie Konstruktoren, und mit einem Konstruktor in meinem Beispiel-Implementierungnew
haben, wäre nötig, um dienew
Betreiber sowieso... nur anders herum wäre, um die__proto__
Eigenschaft, aber es ist nicht standard, und es ist veraltet. Siehe Antwort, in dem ich erklären den Unterschied zwischen denprototype
- Eigenschaft von function-Objekten und der interne[[Prototype]]
Eigenschaft, die alle Objekte haben, bilden die prototype chain.Die doppelte Verwendung des Begriffs ist sicherlich verwirrend. Aber die Antwort, die Links aus der Einstellung von Objekt-Konstruktor, Denn aus meinen versuchen, scheint, wie die Konstruktor-Funktion geklont wird, angewendet und dem Ergebnis Hinzugefügt .Konstruktor Wert.
Ich gehe davon aus, dass die
arguments
im Beispiel sollenf
.. oder bin ich etwas fehlt?InformationsquelleAutor CMS
Den Ausdruck
new C(arg1, arg2)
:Angenommen, C ist eine JavaScript-Funktion (andernfalls erhalten Sie eine Fehlermeldung):
"
prototype
"- Eigenschaft derC
.prototype
für eine Funktion ist ein Objekt (automatisch erstellt, wenn die Funktion deklariert ist) mit Ihrem Prototyp festgelegtObject.prototype
und einconstructor
Eigenschaft verweist wieder auf die FunktionC
.C
mit 'this
' auf das neue Objekt, und mit der angegebenen Argumente.C
gibt ein Objekt, dieses Objekt ist das Ergebnis des Ausdrucks. Ansonsten wird die neu erstellte Objekt ist das Ergebnis des Ausdrucks.Alternative zu
new
in ECMAScript 5 wäre die Verwendung der builtinObject.createObject
Methode.new C(arg1, arg2)
wäre äquivalent zu:Standard-JavaScript erlaubt es Ihnen nicht explizit den Prototyp eines Objekts, so
Object.createObject
nicht umgesetzt werden können in der Sprache selbst. Einige Implementierungen erlauben es durch die nicht-standard-Eigenschaft __proto__. In diesem Fallnew C
kann simuliert werden, wie diese:prototype
Eigenschaft einer benutzerdefinierten Funktion, ist ein Objekt, das enthält dieconstructor
Eigenschaft, die zurück verweist auf die Funktion selbst, und es erbt vonObject.prototype
. Dieses Objekt wird initialisiert, wenn Funktion von Objekten erstellt werden. ÜberObject.create
, es kann nur sein, teilweise emuliert auf ES3, Einstellung der[[Prototype]]
Immobilie getan werden kann, durch eine vorübergehende Konstruktor, aber ja, es ist unmöglich zu emulieren, vollkommen, mehr sehen. Cheers.InformationsquelleAutor JacquesB