Prototyp vs. Nicht, was sind Vorteile?

8

Hier habe ich zwei Objekte gemacht; Einer hat Accessormethoden im Konstruktor, der andere im Prototyp. Warum sollte man eines von diesen über das andere wählen?

%Vor%     
Shawn J. Goff 23.08.2009, 19:22
quelle

3 Antworten

8

Der ursprüngliche Unterschied besteht darin, dass die Implementierung von getSecret und setSecret in Ihrem ersten Beispiel ohne Prototyp auf jeder Instanz von spy1 liegt.

In Ihrem zweiten Beispiel sind die Funktionen auf dem Prototyp definiert, und alle Instanzen beziehen sich direkt auf sie, Sie können es testen:

%Vor%

Beachten Sie auch, was @ T.J. Kommentiert, in Ihrem zweiten Beispiel, mit dem Prototyp, haben Sie keinen Zugriff auf die Constructor-Funktion Schließung, und dafür machen Sie eine window.secret globale Variable.

Wenn Sie vorhaben, mit privilegierten Methoden zu arbeiten, ist die Erweiterung des Prototyps keine Option, sondern alle Methoden, die der Zugriff auf die im Rahmen der Konstruktorfunktion definierten Variablen muss innerhalb davon deklariert werden ...

Siehe auch: Closures .

    
CMS 23.08.2009, 19:31
quelle
5

In Ihrem ersten Beispiel erstellen Sie neue Funktionen für jede Instanz des Objekts, wenn Sie eine neue instanziieren. Im zweiten Fall wird nur eine einzige Kopie der Funktion erstellt, die von allen Instanzen verwendet wird.

Der zweite Weg kann Speicher sparen. Sie können auch die Verkettung von Prototypen verwenden, um die Vererbung zu implementieren.

Übrigens, Ihr zweites Beispiel wird nicht wie geschrieben funktionieren. Die Variable secret in spy2 ist lokal für den Konstruktor. In den Funktionen setSecret und getSecret im Prototyp greifen Sie auf eine einzelne globale Variable zu.

    
jimr 23.08.2009 19:44
quelle
1

Mit der zweiten Version erhalten Sie einen saubereren "Konstruktor".

    
Flavius Stef 23.08.2009 19:28
quelle

Tags und Links