Prototyp-Methoden im Konstruktor definieren

8

Heute habe ich ein JavaScript-Muster gesehen, das ich noch nie in meinem ganzen Leben gesehen habe. Ich kann den Zweck der Verwendung dieses Musters nicht sagen. Es scheint mir falsch, aber ich möchte ein bisschen konservativ sein. Es könnte ein fantastisches Muster sein, das ich noch nie zuvor gesehen habe.

%Vor%

Erstens bin ich kein Fan davon, Methoden (als privilegierte Member) ohne Grund im Konstruktor zu erstellen. Dies würde jedes Mal zum Erstellen von Funktionen führen, wenn eine Instanz erstellt wird. Zweitens ruft es in diesem Code-Snippet auch den Prototypnamen "Dog" anstelle von "this" auf. Das macht mich sehr verwirrt.

Weiß jemand, was gut daran ist?

Danke! Gnade

    
Grace Shao 19.08.2011, 00:04
quelle

2 Antworten

12

Das ist eine sehr schlechte Idee, aus einer großen Anzahl von Gründen. Einige davon sind:

  1. Das Hinzufügen von Methoden zum Prototyp im Konstruktor führt dazu, dass die Prototypmethode für alle Instanzen ersetzt wird, immer wenn Sie einen neuen Hund instanziieren.
  2. Der Aufruf von Dog.prototype.bark() bedeutet, dass this Dog.prototype ist und nicht Ihre Instanz von Dog , was ernsthafte Probleme verursachen kann.
  3. this.bark = function () { Dog.prototype.bark(); } ist eine ernste WTF. Weil this.bark bereits die Prototyp-Methode auswertet, ist dies unnötig. Und wenn man es so nennt, wird der natürliche this Wert zerstört, wie in # 2 erwähnt.

Hier ist, was sein sollte:

%Vor%

Oder alternativ, ohne den Prototyp überhaupt:

%Vor%

Ich würde diesem Schnipsel von Ihnen überhaupt nicht vertrauen.

    
Alex Wayne 19.08.2011, 00:14
quelle
2

Entschuldigung für die SEHR späte Antwort, aber wenn Sie wirklich die Prototypen innerhalb des Konstruktors hinzufügen und sie nicht jedes Mal neu erstellen lassen möchten, wenn eine neue Instanz erstellt wird, können Sie dies tun:

%Vor%

Ich würde wahrscheinlich immer noch nicht diese Methode verwenden, aber ich habe einige über Instanzen, wo diese Methode eine Option war, wenn es um Frameworks von Drittanbietern ging (die zwielichtige Art).

    
DrunkenBeetle 31.08.2015 04:38
quelle