Maison > interface Web > js tutoriel > 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
Libérer: 2024-10-30 21:14:02
original
691 Les gens l'ont consulté

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;
  }
};
Copier après la connexion

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;
}
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal