FinalizationRegistry.prototype.unregister()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2021.
Die unregister()
-Methode von FinalizationRegistry
-Instanzen meldet einen Zielwert von diesem FinalizationRegistry
ab.
Syntax
unregister(unregisterToken)
Parameter
unregisterToken
-
Das Token, das mit der
register()
-Methode beim Registrieren des Zielwerts verwendet wurde. Mehrere Zellen, die mit demselbenunregisterToken
registriert sind, werden zusammen abgemeldet.
Rückgabewert
Ein boolescher Wert, der true
ist, wenn mindestens eine Zelle abgemeldet wurde, und false
, wenn keine Zelle abgemeldet wurde.
Ausnahmen
TypeError
-
Wird ausgelöst, wenn
unregisterToken
kein Objekt oder ein nicht registriertes Symbol ist.
Beschreibung
Wenn ein Zielwert zurückgewonnen wurde, ist er nicht mehr im Registry registriert. Es ist nicht notwendig, unregister
in Ihrem Bereinigungs-Callback aufzurufen. Rufen Sie unregister
nur auf, wenn Sie kein Bereinigungs-Callback erhalten haben und keines mehr benötigen.
Beispiele
Verwendung von unregister
Dieses Beispiel zeigt, wie ein Zielobjekt registriert wird, indem dasselbe Objekt als Abmeldetoken verwendet wird, und wie es später über unregister
abgemeldet wird:
class Thingy {
static #cleanup = (label) => {
// ^^^^^−−−−− held value
console.error(
`The "release" method was never called for the object with the label "${label}"`,
);
};
#registry = new FinalizationRegistry(Thingy.#cleanup);
/**
* Constructs a `Thingy` instance.
* Be sure to call `release` when you're done with it.
*
* @param label A label for the `Thingy`.
*/
constructor(label) {
// vvvvv−−−−− held value
this.#registry.register(this, label, this);
// target −−−−−^^^^ ^^^^−−−−− unregister token
}
/**
* Releases resources held by this `Thingy` instance.
*/
release() {
this.#registry.unregister(this);
// ^^^^−−−−− unregister token
}
}
Dieses Beispiel zeigt, wie ein Zielobjekt unter Verwendung eines anderen Objekts als Abmeldetoken registriert wird:
class Thingy {
static #cleanup = (file) => {
// ^^^^−−−−− held value
console.error(
`The "release" method was never called for the "Thingy" for the file "${file.name}"`,
);
};
#registry = new FinalizationRegistry(Thingy.#cleanup);
#file;
/**
* Constructs a `Thingy` instance for the given file.
* Be sure to call `release` when you're done with it.
*
* @param filename The name of the file.
*/
constructor(filename) {
this.#file = File.open(filename);
// vvvvv−−−−− held value
this.#registry.register(this, label, this.#file);
// target −−−−−^^^^ ^^^^^^^^^^−−−−− unregister token
}
/**
* Releases resources held by this `Thingy` instance.
*/
release() {
if (this.#file) {
this.#registry.unregister(this.#file);
// ^^^^^^^^^^−−−−− unregister token
File.close(this.#file);
this.#file = null;
}
}
}
Spezifikationen
Specification |
---|
ECMAScript Language Specification # sec-finalization-registry.prototype.unregister |
Browser-Kompatibilität
BCD tables only load in the browser