Heim >Web-Frontend >js-Tutorial >Warum sollten Prototypmethoden außerhalb der Konstruktorfunktion definiert werden?

Warum sollten Prototypmethoden außerhalb der Konstruktorfunktion definiert werden?

DDD
DDDOriginal
2024-10-30 21:14:02691Durchsuche

Why Should Prototype Methods Be Defined Outside the Constructor Function?

Zuweisen von Prototypmethoden innerhalb der Konstruktorfunktion: Mögliche Fallstricke

Stilistisch gesehen bevorzugen einige die folgende Struktur zur Definition von Prototypmethoden:

var Filter = function( category, value ){
  this.category = category;
  this.value = value;

  // product is a JSON object
  Filter.prototype.checkProduct = function( product ){
    // run some checks
    return is_match;
  }
};

Dieser Ansatz weist jedoch im Vergleich zur alternativen Struktur mehrere Nachteile auf:

var Filter = function( category, value ){
  this.category = category;
  this.value = value;
};// var Filter = function(){...}

Filter.prototype.checkProduct = function( product ){
  // run some checks
  return is_match;
}

Funktionelle Nachteile:

  1. Redundant und Ineffiziente Zuweisung: Die Prototyp-Methode wird mehrfach zugewiesen, was unnötig ist und Auswirkungen auf die Leistung haben kann.
  2. Bereichsprobleme: Das Verweisen auf lokale Variablen des Konstruktors innerhalb der Prototyp-Methode kann möglich sein zu unerwarteten Ergebnissen führen. Beispiel:
var Counter = function(initialValue){
  var value = initialValue;

  // product is a JSON object
  Counter.prototype.get = function() {
      return value++;
  }
};

var c1 = new Counter(0);
var c2 = new Counter(10);
console.log(c1.get());    // outputs 10, should output 0

In diesem Szenario gibt get() den Wert des lokalen Variablenwerts von c2 anstelle des Werts von c1 zurück, da der Methodenabschluss auf den zuletzt definierten Wert im Prototyp verweist.

Andere Überlegungen:

  • Prototyping außerhalb des Konstruktors: Die erste Struktur verhindert den Zugriff auf den Prototyp außerhalb des Konstruktors, was möglicherweise die Flexibilität einschränkt.
  • Methodenplatzierung:In der zweiten Struktur werden Methoden direkt auf dem Objekt und nicht auf dem Prototyp platziert, was in einigen Fällen die Leistung verbessern kann.

Fazit :

Während die erste Struktur stilistisch ansprechend sein mag, kann sie funktionale Nachteile und Umfangsprobleme mit sich bringen. Im Allgemeinen wird empfohlen, Prototypmethoden außerhalb der Konstruktorfunktion (wie in der zweiten Struktur) zuzuweisen, um mögliche Probleme zu vermeiden.

Das obige ist der detaillierte Inhalt vonWarum sollten Prototypmethoden außerhalb der Konstruktorfunktion definiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn