Maison >interface Web >js tutoriel >Comment les classes ES6 peuvent-elles être utilisées pour étendre les fonctions et accéder aux données d'instance ?

Comment les classes ES6 peuvent-elles être utilisées pour étendre les fonctions et accéder aux données d'instance ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-21 06:09:30224parcourir

How can ES6 Classes be Used to Extend Functions and Access Instance Data?

Extension de fonction avec les classes ES6

Dans ES6, des objets spéciaux peuvent être étendus, permettant l'héritage de l'objet Function. Bien qu'il soit possible d'appeler de tels objets en tant que fonctions, la mise en œuvre d'une logique pour cet appel peut s'avérer difficile.

Transmission de données d'instance à un appel de fonction

Lors de l'appel d'une classe en tant que fonction , cela fait référence à l'objet window. Pour accéder aux données d'instance, deux approches sont disponibles :

  1. Hardcoding : Forcer le super appel à attendre une chaîne de code contenant les données d'instance.
class Smth extends Function {
  constructor(x) {
    super("return " + JSON.stringify(x) + ";");
  }
}
  1. Utilisation d'une fermeture : Renvoie une fonction de fermeture qui accède aux variables d'instance.
class Smth extends Function {
  constructor(x) {
    function smth() { return x; };
    Object.setPrototypeOf(smth, Smth.prototype);
    return smth;
  }
}

Résumation de l'extension de fonction

Une approche plus généralisée consiste à créer une classe ExtensibleFunction qui gère l'extension :

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

Cette classe peut ensuite être utilisée pour étendre des classes spécifiques :

class Smth extends ExtensibleFunction {
  constructor(x) {
    super(() => { return x; }); // closure
  }
}

En résumé, L'extension de Function avec les classes ES6 permet d'hériter du comportement de la fonction tout en personnalisant la logique d'appel. Différentes approches peuvent être utilisées pour donner accès aux données d'instance lors de l'appel de la fonction étendue.

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!

Déclaration:
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