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:
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:
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!