FinalizationRegistry.prototype.unregister()
Baseline Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в различных версиях браузеров. Она доступна во всех браузерах с апреля 2021 года.
Метод unregister() экземпляров FinalizationRegistry отменяет регистрацию целевого значения из этого FinalizationRegistry.
Синтаксис
unregister(unregisterToken)
Параметры
-
unregisterToken - Токен, использованный с методом
register()при регистрации целевого значения. Несколько ячеек, зарегистрированных с одним и тем жеunregisterToken, будут отменены вместе.
Возвращаемое значение
Логическое значение, которое является true, если была отменена регистрация как минимум одной ячейки, и false, если не была отменена регистрация ни одной ячейки.
Исключения
-
TypeError - Выбрасывается, если
unregisterTokenне является объектом или незарегистрированным символом.
Описание
Когда целевое значение было освобождено, оно больше не зарегистрировано в реестре. Нет необходимости вызывать unregister в вашем обработчике очистки. Вызывайте unregister только в том случае, если вы не получили обработчик очистки и больше не нуждаетесь в его получении.
Примеры
Использование unregister
Этот пример показывает регистрацию целевого объекта с использованием того же объекта в качестве токена отмены регистрации, а затем его последующую отмену регистрации через unregister:
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
}
}
Этот пример показывает регистрацию целевого объекта с использованием другого объекта в качестве его токена отмены регистрации:
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;
}
}
}
Спецификации
| Спецификация |
|---|
| ECMAScript® 2027 Language Specification # sec-finalization-registry.prototype.unregister |
Совместимость с браузерами
| Настольные компьютеры | Мобильные устройства | Сервер | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | WebView на iOS | Bun | Deno | Node.js | |
unregister |
84 |
84 |
79 |
70 |
14.1 |
84 |
79 |
60 |
14.5 |
14.0 |
84 |
14.5 |
1.0.0 |
1.0 |
14.6.0 |
symbol_as_target |
109 |
109 |
Нет |
95 |
16.4 |
109 |
Нет |
74 |
16.4 |
21.0 |
109 |
16.4 |
1.0.0 |
1.28 |
20.0.0 |
См. также
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry/unregister