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

Comment étendre les fonctions avec les classes ES6 et accéder aux variables d'instance ?

Linda Hamilton
Libérer: 2024-10-21 06:04:02
original
563 Les gens l'ont consulté

How to Extend Functions with ES6 Classes and Access Instance Variables?

Extension de fonctions avec les classes ES6

ES6 introduit la possibilité d'étendre des objets spéciaux comme l'objet Function. Cela nous permet de créer des classes qui héritent de fonctions et se comportent comme des fonctions lorsqu'elles sont appelées. Cependant, la mise en œuvre de la logique de tels appels nécessite un examen attentif.

Comprendre le prototype de fonction

Lors de l'appel d'une classe en tant que fonction, le mot-clé this fait référence à l'objet global (fenêtre dans un environnement de navigateur) plutôt que l'instance de classe. Pour accéder à l'instance de classe, nous ne pouvons pas utiliser l'appel super() traditionnel, car il attend une chaîne de code pour le constructeur de fonction.

Codage en dur de la valeur

Une approche consiste à coder en dur la valeur dans le constructeur :

class Smth extends Function {
  constructor(x) {
    super("return " + JSON.stringify(x) + ";");
  }
}

(new Smth(256))() // Returns 256
Copier après la connexion

Cependant, ce n'est pas idéal car cela repose sur des valeurs codées en dur.

Exploiter les fermetures

Pour activer une fermeture pouvant accéder aux variables d'instance, nous pouvons créer une fonction imbriquée dans le constructeur :

class Smth extends Function {
  constructor(x) {
    // Refer to `smth` instead of `this`
    function smth() {
      return x;
    }
    Object.setPrototypeOf(smth, Smth.prototype);
    return smth;
  }
}

(new Smth(256))() // Returns 256
Copier après la connexion

Abstraction avec ExtensibleFunction

Pour abstraire ce modèle, nous pouvons créer une classe ExtensibleFunction :

class ExtensibleFunction extends Function {
  constructor(f) {
    return Object.setPrototypeOf(f, new.target.prototype);
  }
}

class Smth extends ExtensibleFunction {
  constructor(x) {
    super(function() {
      return x;
    });
  }
}

(new Smth(256))() // Returns 256
Copier après la connexion

Cette approche fournit un moyen réutilisable de créer des fonctions extensibles avec accès aux variables d'instance.

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