Maison  >  Article  >  interface Web  >  Pourquoi les méthodes prototypes devraient-elles être définies en dehors de la fonction constructeur ?

Pourquoi les méthodes prototypes devraient-elles être définies en dehors de la fonction constructeur ?

DDD
DDDoriginal
2024-10-30 21:14:02598parcourir

Why Should Prototype Methods Be Defined Outside the Constructor Function?

Attribution de méthodes prototypes dans la fonction constructeur : pièges potentiels

Sur le plan stylistique, certains préfèrent la structure suivante pour définir les méthodes prototypes :

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;
  }
};

Cependant, cette approche présente plusieurs inconvénients par rapport à la structure alternative :

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;
}

Inconvénients fonctionnels :

  1. Redondant et Affectation inefficace : La méthode prototype est assignée plusieurs fois, ce qui est inutile et peut avoir des implications sur les performances.
  2. Problèmes de portée : Le référencement des variables locales du constructeur à partir de la méthode prototype peut conduire à des résultats inattendus. Par exemple :
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

Dans ce scénario, get() renvoie la valeur de la variable locale de c2 au lieu de celle de c1 car la fermeture de la méthode fait référence à la valeur la plus récemment définie sur le prototype.

Autres considérations :

  • Prototypage en dehors du constructeur : La première structure interdit l'accès au prototype en dehors du constructeur, limitant potentiellement la flexibilité.
  • Placement des méthodes : Dans la deuxième structure, les méthodes sont placées directement sur l'objet plutôt que sur le prototype, ce qui peut améliorer les performances dans certains cas.

Conclusion :

Bien que la première structure puisse être stylistiquement agréable, elle peut introduire des inconvénients fonctionnels et des problèmes de portée. Il est généralement recommandé d'attribuer des méthodes prototypes en dehors de la fonction constructeur (comme dans la deuxième structure) pour éviter des problèmes potentiels.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn