Heim >Web-Frontend >js-Tutorial >Prototyp- vs. Konstruktormethoden in JavaScript: Ist eine wirklich schneller?
In JavaScript gibt es zwei Ansätze zum Definieren öffentlicher Methoden für Klassen: über den Prototyp oder mithilfe des Konstruktors Funktion. Während der Prototyp-Ansatz aufgrund gemeinsamer Funktionsreferenzen effizienter sein soll, sind potenzielle Auswirkungen auf die Leistung zu berücksichtigen.
function MyClass() { var privateInstanceVariable = 'foo'; this.myFunc = function() { alert(privateInstanceVariable ); } }
Bei dieser Methode Jede Instanz der Klasse verfügt über eine eigene private Instanzvariable und eine eigene Kopie der myFunc-Methode.
function MyClass() { } MyClass.prototype.myFunc = function() { alert("I can't use private instance variables. :("); }
Hier wird die myFunc-Methode im Klassenprototyp definiert. Alle Instanzen nutzen die gleiche Funktionsreferenz, was möglicherweise die Leistung verbessert.
Laut einem JavaScript-Leistungstest (https://jsperf.app/prototype-vs-this) werden Methoden deklariert über den Prototyp ist tatsächlich schneller. Die Bedeutung dieses Unterschieds ist jedoch fraglich.
Sofern Sie nicht wiederholt Tausende von Objekten erstellen und zerstören, sind die Auswirkungen auf die Leistung wahrscheinlich vernachlässigbar. In den meisten Fällen ist es wichtiger, den Ansatz zu verwenden, der für die Lesbarkeit und Wartbarkeit Ihres Codes sinnvoller ist.
Es ist wichtig zu beachten, dass Methode 1 zwar private Instanzvariablen unterstützt, diese jedoch gelten nur herkömmlich privat. Entwickler können auf Wunsch weiterhin darauf zugreifen. Um Variablen vor dem Zugriff von außen zu schützen, sollten Sie erwägen, sie mit einem führenden Unterstrich zu deklarieren (z. B. _process()) oder benutzerdefinierte Getter und Setter zu implementieren, um die Kapselung zu erzwingen.
Das obige ist der detaillierte Inhalt vonPrototyp- vs. Konstruktormethoden in JavaScript: Ist eine wirklich schneller?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!