JavaScript: Class.method vs. Class.prototype.method
Was ist der Unterschied zwischen den beiden folgenden Deklarationen?
Class.method = function () { /* code */ }
Class.prototype.method = function () { /* code using this.values */ }
Ist es okay, denken Sie an die erste Anweisung einer Deklaration einer statischen Methode, und die zweite Anweisung als eine Erklärung, eine Instanz-Methode?
InformationsquelleAutor der Frage postrational | 2009-10-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, die erste Funktion hat keine Beziehung mit einer Objekt-Instanz, die KonstruktorfunktionSie können es betrachten, wie ein 'statische Methode'.
In JavaScript-Funktionen sind erstklassige Objekte, das heißt, Sie können Sie behandeln wie jedes Objekt, in diesem Fall werden Sie nur das hinzufügen einer Eigenschaft, um die Funktion Objekt.
Die zweite Funktion, als Sie den ausbau der Konstruktor-Funktion Prototyp, es wird verfügbar sein, um alle Objekt-Instanzen erstellt mit der
new
Schlüsselwort, und der Kontext, innerhalb dieser Funktion (diethis
Schlüsselwort) beziehen sich auf das aktuelle Objekt-Instanz, wo Sie es nennen.Betrachten Sie dieses Beispiel:
InformationsquelleAutor der Antwort CMS
Wenn du mehr als eine Instanz von MyClass ist , werden Sie trotzdem nur nur eine Instanz von publicMethod in Erinnerung, aber im Fall von privilegedMethod Sie werden am Ende erstellen mehrerer Instanzen und staticMethod keine Beziehung mit einer object-Instanz.
Deshalb Prototypen Speicherplatz sparen.
Auch, wenn Sie die übergeordneten Eigenschaften des Objekts, wird das Kind die entsprechende Eigenschaft geändert wurde, aktualisiert.
InformationsquelleAutor der Antwort user2440156
Für visuelle Lerner, die bei der Definition der Funktion ohne
.prototype
Mit dem gleichen code, wenn
.prototype
Hinzugefügt wird,Deutlicher machen,
****Hinweis: für das Beispiel oben, someInstance.Methode() wird nicht ausgeführt werden,
ExampleClass.Methode() führt zu Fehler & die Ausführung kann nicht fortgesetzt werden.
Aber für illustration & einfach verstehen, ich habe immer diese Reihenfolge.****
Generierten Ergebnisse aus
chrome developer console
&JS Bin
Klicken Sie auf das jsbin link oben, um zu Schritt durch den code.
Knebel, kommentierte Abschnitt mit Strg+/
InformationsquelleAutor der Antwort SAm
Ja, der erste ist ein
static method
auch alsclass method
während der zweite ist eininstance method
.Betrachten Sie die folgenden Beispiele zu verstehen, um es im detail.
In ES5
Im obigen code
isPerson
ist eine statische Methode, währendsayHi
ist eine Instanz-Methode vonPerson
.Unten, wie Sie ein Objekt erstellen aus
Person
Konstruktor.var aminu = new Person("Aminu", "Abubakar");
Verwendung der statischen Methode
isPerson
.Person.isPerson(aminu); //will return true
Verwendung der Instanz-Methode
sayHi
.aminu.sayHi(); //will return "Hi Aminu"
In ES6
Schauen, wie
static
Schlüsselwort verwendet wurde, zu erklären die statische MethodeisPerson
.Erstellen Sie ein Objekt der
Person
Klasse.const aminu = new Person("Aminu", "Abubakar");
Verwendung der statischen Methode
isPerson
.Person.isPerson(aminu); //will return true
Verwendung der Instanz-Methode
sayHi
.aminu.sayHi(); //will return "Hi Aminu"
HINWEIS: Beide Beispiele sind im wesentlichen die gleichen, JavaScript bleibt eine klassenlose Sprache. Die
class
eingeführt ES6 ist in Erster Linie eine syntaktische Zucker über die vorhandene Prototyp-basierte Vererbung-Modell.InformationsquelleAutor der Antwort Aminu Kano