Heim  >  Artikel  >  Web-Frontend  >  Wie ändert new() in js den Rückgabewert des Konstruktors und diesen Zeiger?

Wie ändert new() in js den Rückgabewert des Konstruktors und diesen Zeiger?

php中世界最好的语言
php中世界最好的语言Original
2018-06-12 15:24:182613Durchsuche

Dieses Mal zeige ich Ihnen, wie new() in js den Rückgabewert des Konstruktors ändert und welchen Sinn dies hat. Welche Vorsichtsmaßnahmen gibt es, um den Rückgabewert des Konstruktors und den Sinn davon durch new() zu ändern? js? Hier ist ein praktischer Fall, werfen wir einen Blick darauf.

Vorwort

Wie andere Hochsprachen verfügt auch JavaScript über den neuen Operator. Wir wissen, dass der neue Operator zum Instanziieren von a verwendet wird Klasse. Dadurch wird ein Instanzobjekt im Speicher zugewiesen. Aber in JavaScript ist alles ein Objekt. Warum müssen wir new verwenden, um Objekte zu generieren? In diesem Artikel erfahren Sie mehr über das Geheimnis des Neuen in Javascript...

Um eine neue Instanz von Person zu erstellen, müssen Sie den Operator new verwenden.

Der Aufruf des Konstruktors auf diese Weise durchläuft tatsächlich die folgenden 4 Schritte:

(1) Erstellen eines neuen Objekts; Weisen Sie dem neuen Objekt den Gültigkeitsbereich des Konstruktors zu (damit dieser auf das neue Objekt verweist);

(3) Führen Sie den Code im Konstruktor aus (fügen Sie Attribute zum neuen Objekt hinzu); (4) Neues Objekt zurückgeben.

neuer Operator

Nach der Einführung der oben genannten Grundkonzepte und dem Hinzufügen des neuen Operators können wir die traditionell orientierte Objektklasse vervollständigen + Neue Methode erstellt Objekte. In JavaScript nennen wir diese Methode Pseudoklassisch. Basierend auf dem obigen Beispiel führen wir den folgenden Code aus

var obj = new Base();

Was ist das Ergebnis dieses Codes? Das Objektmodell, das wir in der Javascript-Engine sehen, ist:

Was genau macht der neue Operator? Es ist eigentlich ganz einfach, er macht drei Dinge.

var obj = {};
obj.__proto__ = Base.prototype;
Base.call(obj);
In der ersten Zeile erstellen wir ein leeres Objekt obj

In der zweiten Zeile verweisen wir das __proto__-Mitglied dieses leeren Objekts auf das Prototyp-Mitgliedsobjekt des Basisfunktionsobjekts

In der dritten Zeile ersetzen wir den Zeiger „this“ des Basisfunktionsobjekts durch obj und rufen dann die Basisfunktion auf. Daher weisen wir dem obj-Objekt den Wert „base“ zu. Informationen zur Verwendung der Aufruffunktion.

Was wird der Effekt sein, wenn wir dem Base.prototype-Objekt einige Funktionen hinzufügen?

Der Code lautet beispielsweise wie folgt:

Base.prototype.toString = function() {
 return this.id;
}

Wenn wir dann new verwenden, um ein neues Objekt gemäß den Eigenschaften von __proto__ zu erstellen, kann die toString-Methode dies tun Außerdem wird auf die Methode zum Erstellen neuer Objekte zugegriffen. Wir sehen also: Im -Konstruktor legen wir die Mitgliedsvariablen der „Klasse“ fest (zum Beispiel: id im Beispiel) und im Konstruktorobjektprototyp legen wir die öffentlichen Methoden der „Klasse“ fest '. Daher werden die Auswirkungen von Klassen und Klasseninstanziierungen durch Funktionsobjekte, die eindeutigen __proto__- und Prototyp-Mitglieder von Javascript sowie den neuen Operator simuliert.

Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!

Empfohlene Lektüre:

Vue + iView Excel-Tabelle exportieren

Element-UI-Funktionsersatz ivew

Das obige ist der detaillierte Inhalt vonWie ändert new() in js den Rückgabewert des Konstruktors und diesen Zeiger?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn