このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

FinalizationRegistry.prototype.register()

Baseline 広く利用可能 *

この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2021年4月以降、すべてのブラウザーで利用可能です。

* この機能の一部は、対応レベルが異なる場合があります。

register()FinalizationRegistry インスタンスのメソッドで、値をこの FinalizationRegistry へ登録し、オブジェクトがガベージコレクションで回収された場合、このレジストリーのコールバックが呼び出されるようになります。

構文

js
register(target, heldValue)
register(target, heldValue, unregisterToken)

引数

target

登録する対象オブジェクトです。

heldValue

このオブジェクトのためにファイナライザーへ渡す値です。これは target オブジェクトにすることはできません。

unregisterToken 省略可

のちに対象オブジェクトを登録解除するために unregister メソッドと共に使用するトークンです。提供される場合(かつ undefined ではない場合)、これはオブジェクトまたは未登録シンボルである必要があります。提供されなかった場合は、対象を登録解除することはできません。

返値

なし (undefined)。

例外

TypeError

以下のいずれかの場合に発生します。

  • target はオブジェクトでも、未登録シンボルでもない(オブジェクトはプリミティブとは対照的です。関数もオブジェクトです)。
  • targetheldValue と同じ値である (target === heldValue)
  • unregisterToken がオブジェクトでも未登録シンボルでもない

解説

重要な注意点については、 FinalizationRegistry ページの可能な限り避けるクリーンアップコールバックの注意の部分を参照してください。

register の使用

次の例は target で参照される対象オブジェクトを保持値 "some value" で登録し、対象オブジェクト自身を登録解除トークンとして渡します。

js
registry.register(target, "some value", target);

次の例は target で参照される対象オブジェクトを他のオブジェクトを保持値として登録し、登録解除トークンを渡していません (すなわち target は登録解除できません)。

js
registry.register(target, { useful: "info about target" });

仕様書

仕様書
ECMAScript® 2027 Language Specification
# sec-finalization-registry.prototype.register

ブラウザーの互換性

関連情報