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