Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

FinalizationRegistry.prototype.unregister()

Baseline Widely available *

Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis ⁨avril 2021⁩.

* Certaines parties de cette fonctionnalité peuvent bénéficier de prise en charge variables.

La méthode unregister() permet de retirer un objet donné d'un registre FinalizationRegistry.

Syntaxe

js
unregister(jetonDesenregistrement);

Paramètres

jetonDesenregistrement

Le jeton utilisé par la méthode register() lors de l'enregistrement de l'objet cible.

Valeur de retour

undefined.

Notes

Lorsqu'un objet cible a été récupéré, il ne fait plus partie du registre. Aussi, il n'est pas nécessaire d'utiliser unregister() dans les fonctions de rappel de nettoyage. Appelez uniquement unregister si vous n'avez pas reçu de fonction de rappel de nettoyage et que vous n'en avez plus besoin.

Exemples

Utiliser unregister()

Cet exemple illustre l'enregistrement d'un objet en l'utilisant lui-même comme jeton pour le retirer du registre par la suite via unregister() :

js
class Bidule {
  #cleanup = (label) => {
    //        ^^^^^−−−−− valeur tenue
    console.error(
      `La méthode \`release\` n'a jamais été appelée pour l'objet avec l'étiquette "${label}"`,
    );
  };
  #registry = new FinalizationRegistry(this.#cleanup);

  /**
   * Construit une instance `Bidule`. Assurez-vous d'appeler `release`
   * lorsque vous avez fini de vous en servir.
   *
   * @param   label       Une étiquette pour le `Bidule`.
   */
  constructor(label) {
    //                            vvvvv−−−−− valeur tenue
    this.#registry.register(this, label, this);
    //          cible  −−−−−^^^^         ^^^^−−−−− jeton de désenregistrement
  }

  /**
   * Libère les ressources tenues par cette instance de `Bidule` .
   */
  release() {
    this.#registry.unregister(this);
    //                        ^^^^−−−−− jeton de désenregistrement
  }
}

Dans l'exemple qui suit, on illustre l'enregistrement en utilisant un autre objet comme jeton de désenregistrement :

js
class Bidule {
  #cleanup = (label) => {
    //        ^^^^^−−−−− valeur tenue
    console.error(
      `La méthode \`release\` n'a jamais été appelée pour \`Bidule\` pour le fichier "${file.name}"`,
    );
  };
  #registry = new FinalizationRegistry(this.#cleanup);

  /**
   * Construit une instance de `Bidule` pour le fichier donné.
   * Assurez-vous d'appeler `release` lorsque vous n'en avez plus
   * besoin.
   * @param   filename    Le nom du fichier.
   */
  constructor(filename) {
    this.#file = File.open(filename);
    //                            vvvvv−−−−− valeur tenue
    this.#registry.register(this, label, this.#file);
    //          cible  −−−−−^^^^         ^^^^^^^^^^−−−−− jeton de désenregistrement
  }

  /**
   * On libère les ressources tenues par cette instance de `Bidule`.
   */
  release() {
    if (this.#file) {
      this.#registry.unregister(this.#file);
      //                        ^^^^^^^^^^−−−−− jeton de désenregistrement
      File.close(this.#file);
      this.#file = null;
    }
  }
}

Spécifications

Specification
ECMAScript® 2026 Language Specification
# sec-finalization-registry.prototype.unregister

Compatibilité des navigateurs

Voir aussi