Maison > interface Web > js tutoriel > le corps du texte

Pourquoi l'attribution de méthodes prototypes à l'intérieur du constructeur est-elle une mauvaise idée ?

Linda Hamilton
Libérer: 2024-10-30 22:08:30
original
218 Les gens l'ont consulté

Why is Assigning Prototype Methods Inside the Constructor a Bad Idea?

Attribution de méthodes de prototype à l'intérieur du constructeur : inconvénients et problèmes de portée

Cette question aborde les inconvénients potentiels et les problèmes de portée inattendus qui peuvent survenir lors de l'attribution méthodes de prototype directement dans la fonction constructeur. La discussion découle d'une préférence pour l'attribution de méthodes prototypes dans le corps de la fonction, plutôt que de les déclarer séparément en dehors de la portée du constructeur.

Inconvénients :

  1. Affectations répétées de prototypes :
    L'attribution répétée du prototype encore et encore dans le constructeur crée plusieurs objets de fonction pour le même prototype. Cela entraîne une surcharge inutile lors de l'exécution et du garbage collection par rapport à la déclaration du prototype en dehors du constructeur.
  2. Problèmes de portée :
    L'accès aux variables locales du constructeur à partir de la méthode prototype peut conduire à des problèmes inattendus. En effet, chaque nouvelle instance de l'objet crée une nouvelle méthode prototype qui fait référence aux variables locales de cette instance spécifique. Par conséquent, toutes les instances partagent la même méthode prototype, mais avec des fermetures différentes, ce qui entraîne un comportement potentiellement incorrect.

Exemple de code :

<code class="javascript">var Counter = function (initialValue) {
    var value = initialValue; // Local variable of the constructor

    // Assigning prototype method within the constructor
    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</code>
Copier après la connexion

Dans cet exemple, toutes les instances de l'objet Counter partagent la même méthode get prototype, mais chaque instance de méthode utilise la variable de valeur locale de sa propre instance, ce qui peut conduire à des résultats incorrects.

Considérations relatives aux performances :

Bien que l'affectation des méthodes prototypes au sein du constructeur puisse être moins efficace en termes d'utilisation de la mémoire, certains experts affirment que les moteurs JavaScript modernes ont amélioré la gestion de la mémoire, ce qui rend la pénalité en performances négligeable. L'affectation directe d'une méthode sur l'objet lui-même peut offrir de meilleures performances d'exécution dans ces cas.

Bonne pratique :

En tant que bonne pratique générale, il est généralement recommandé d'attribuer un prototype méthodes séparément en dehors de la fonction constructeur, plutôt que dans le corps de la fonction. Cela garantit la clarté, élimine les problèmes de portée potentiels et simplifie le débogage.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!