Der Fall, in dem die Methode im Konstruktor geschrieben wird, wird als Methode innerhalb der Funktion bezeichnet, und der Fall, in dem die Methode auf das Prototyp -Attribut geschrieben wird, wird als Methode auf dem Prototyp bezeichnet.
• Methoden innerhalb der Funktion: Verwenden von Methoden innerhalb der Funktion können wir in der Funktion auf private Variablen zugreifen. Wenn wir mit dem neuen Konstruktor das Objekt verwenden, um private Variablen im Konstruktor zu betreiben, sollten wir in Betracht ziehen, Methoden innerhalb der Funktion zu diesem Zeitpunkt zu verwenden.
• Methoden zum Prototyp: Wenn wir über eine Funktion eine große Anzahl von Objekten erstellen müssen, haben diese Objekte viele Methoden. Zu diesem Zeitpunkt müssen wir in Betracht ziehen, diese Methoden in den Prototyp der Funktion hinzuzufügen. In diesem Fall konsumiert unser Code einen relativ kleinen Speicher.
• In den tatsächlichen Anwendungen werden diese beiden Methoden häufig in Kombination verwendet. Wir müssen also zuerst verstehen, was wir brauchen, und dann wählen, wie man es benutzt.
// Konstruktor -Afunion a (name) {this.name = name || 'A'; this.sayhello = function () {console.log ('Hallo, mein Name ist:' + this.name); }} // Konstruktor Bfunction B (Name) {this.name = name || 'b';} b.prototype.sayhello = function () {console.log ('Hallo, mein Name ist:' + this.name);}; var a1 = new a ('a1'); var a2 = new a ('a2'); a1.sayhello (); B ('b2'); b1.sayhello (); b2.sayhello ();Ich schrieb zwei Konstruktoren, die erste ist a, die eine Methode Sayshello enthält; Der zweite ist der Konstruktor B, der schreibt, dass diese Methode Sayshello auf der Prototyp -Eigenschaft des Konstruktors B. das Schreiben der Methode innerhalb des Konstruktors erhöht, erhöht die Kosten für die Initialisierung eines Objekts durch den Konstruktor und das Schreiben der Methode auf der Prototyp -Eigenschaft reduziert diese Kosten effektiv. Sie denken vielleicht, dass das Aufrufen von Methoden auf dem Objekt viel schneller ist als das Aufrufen von Methoden in seiner Prototyp -Kette, was nicht der Fall ist. Wenn Sie nicht viele Prototypen für das Objekt haben, ist ihre Geschwindigkeit tatsächlich ähnlich.
Darüber hinaus sind einige Dinge zu beachten:
• Beachten Sie zunächst, dass die Methode aller von diesem Konstruktor erzeugten Methode geändert wird, wenn Sie eine Methode in der Prototyp -Eigenschaft der Funktion definieren, wenn Sie eine Methode ändern.
• Ein weiterer Punkt ist das Problem der variablen Verbesserung. Wir können uns den folgenden Code ansehen:
func1 (); // Ein Fehler wird hier gemeldet, da Func1 beim Ausführen der Funktion keinen Wert zugewiesen wurde. Fehler: Func1 ist kein functionVar func1 = function () {console.log ('func1');}; func2 (); // Dies wird korrekt ausgeführt, da die Deklaration der Funktion befördert wird.• In Bezug auf die Frage der Objektserialisierung. Die auf dem Prototyp einer Funktion definierten Attribute werden nicht serialisiert. Sie können den folgenden Code sehen:
Funktion a (name) {this.name = name;} a.prototype.saywhat = 'Sag was ...'; var a = new a ('DreamApple'); console.log (json.Stringify (a));Wir können sehen, dass die Ausgabe {"Name": "Dreamapple"} lautet
In dem obigen Artikel werden die Methode und den Prototyp von JS -Konstruktoren kurz erörtert, dass der Inhalt, den ich mit Ihnen geteilt habe,. Ich hoffe, es kann Ihnen eine Referenz geben und ich hoffe, Sie können Wulin.com mehr unterstützen.