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

Comment puis-je organiser des prototypes JavaScript et conserver « ce » contexte pendant l'héritage ?

Barbara Streisand
Libérer: 2024-11-19 21:48:03
original
676 Les gens l'ont consulté

How Can I Organize JavaScript Prototypes and Maintain `this` Context During Inheritance?

Organiser des prototypes JavaScript avec des références d'objets et un héritage préservés

En JavaScript, organiser le code à l'aide de prototypes et d'héritage peut devenir un défi à mesure que l'application grandit . Considérons le scénario suivant : nous avons une classe carrousel avec plusieurs fonctions :

Carousel.prototype.next = function () {...}
Carousel.prototype.prev = function () {..}
Carousel.prototype.bindControls = function () {..}
Copier après la connexion

Pour améliorer l'organisation du code, nous souhaiterons peut-être regrouper ces fonctions en tant qu'objet :

Carousel.prototype.controls = {
   next: function () { ... } , 
   prev: function() { ... },
   bindControls: function () { .. }
}
Copier après la connexion

Cependant, cette approche rompt la référence à l'objet this, conduisant à des erreurs lors de l'héritage de la classe. Pour résoudre ce problème, nous pouvons explorer différentes stratégies :

Créer une classe de contrôles :

Une approche consiste à définir une classe de contrôles distincte comme suit :

var Controls = function (controllable_object) {
    this.ref = controllable_object;
};
Controls.prototype.next = function () {
    this.ref.foo();
}
// ..

var Carousel = function () {
    this.controls = new Controls(this);
};
// ..
Copier après la connexion

Cela nous permet de conserver la référence à l'objet d'origine, mais cela ne permet pas de remplacer l'implémentation des contrôles.

Utilisation de l'injection de dépendances :

Une approche plus flexible consiste à utiliser l'injection de dépendances :

var Controls = function (controllable_object) {
    this.ref = controllable_object;
};
Controls.prototype.next = function () {
    this.ref.foo();
}
// ..

var Carousel = function () {
        this.controllers = [];
    };
Carousel.prototype.addController = function (controller) {
        this.controllers.push(controller);
    };
// ..

var carousel = new Carousel();
carousel.addController(new Controls(carousel));
Copier après la connexion

Cela nous permet de créer plusieurs contrôleurs et de les ajouter dynamiquement au carrousel, offrant ainsi une flexibilité et la possibilité de remplacer les implémentations.

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