Maison > interface Web > js tutoriel > Comment puis-je organiser du code JavaScript basé sur un prototype tout en préservant les références d'objets et l'héritage ?

Comment puis-je organiser du code JavaScript basé sur un prototype tout en préservant les références d'objets et l'héritage ?

Patricia Arquette
Libérer: 2024-11-17 17:48:01
original
933 Les gens l'ont consulté

How Can I Organize Prototype-Based JavaScript Code While Preserving Object References and Inheritance?

Organiser le JavaScript basé sur un prototype tout en préservant la référence et l'héritage des objets

Dilemme : réorganiser le code pour améliorer la structure

L'héritage prototypique est un paradigme JavaScript puissant, mais la gestion de grandes applications peut s'avérer difficile. Considérons une classe carrousel avec de nombreuses fonctions :

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

La refactorisation pour une meilleure organisation du code pourrait impliquer de regrouper les fonctions en sous-objets :

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

Cependant, ce changement introduit un problème : le " Le mot-clé this" dans ces fonctions ne fait plus référence à l'instance du carrousel.

Surmonter le "this" Problème

Le maintien du contexte « ce » est crucial, en particulier dans les scénarios où les classes héritent des classes parentes. Les fonctions de substitution dans les classes héritées doivent préserver le comportement approprié de « ce ».

Solutions

Enveloppement de sous-objets

Une approche consiste à définir les contrôles en tant que classe distincte et à stocker une référence. à l'instance du carrousel :

var Controls = function (controllable_object) {
    this.ref = controllable_object;
};
Controls.prototype.next = function () {
    this.ref.foo();
}
// ..
Copier après la connexion

Bien que cette solution résout le problème "ceci", elle empêche le remplacement de Implémentation des contrôles.

Injection de dépendances

Une approche plus flexible implique 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);
    };
// ..
Copier après la connexion

Dans ce scénario, la classe carrousel peut ajouter plusieurs contrôleurs, prenant en charge plusieurs ensembles de fonctionnalité et permettant des remplacements faciles.

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