【JavaScript ECMAScript】FinalizationRegistry::FinalizationRegistry.prototype.registerインスタンスメソッドの使い方
FinalizationRegistry.prototype.register()インスタンスメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
FinalizationRegistry.prototype.register()メソッドは、特定のオブジェクトがガベージコレクション(メモリから解放)された際に、あらかじめ登録しておいた後処理を実行するように設定するメソッドです。この機能は、JavaScriptエンジンが管理しない外部リソース(例えば、WebAssemblyのメモリやファイルハンドルなど)をクリーンアップする際に役立ちます。
このメソッドは、監視したいオブジェクト(target)と、そのオブジェクトがメモリから解放されたときに後処理関数に渡される値(heldValue)、そして後から登録を解除するための識別子(unregisterToken)を引数として受け取ります。FinalizationRegistryオブジェクトが作成される際に指定されたコールバック関数は、登録されたtargetオブジェクトがガベージコレクションされると、heldValueを引数として呼び出されます。
注意点として、JavaScriptのガベージコレクションは実行されるタイミングが不定であるため、このメソッドによって登録された後処理がいつ実行されるかは保証されません。そのため、厳密なリソース管理やセキュリティが求められる処理には適しておらず、あくまでも補助的なクリーンアップメカニズムとして利用することが推奨されます。これにより、意図せず外部リソースが解放されないまま残ってしまうといった状況を、最終的に防ぐ目的で使用されます。
構文(syntax)
1finalizationRegistryInstance.register(objectToMonitor, valueForCleanup, optionalUnregisterToken);
引数(parameters)
target, heldValue, unregisterToken = target
- target: 監視対象のオブジェクト。このオブジェクトがガベージコレクションされたときに、コールバック関数が実行されます。
- heldValue: コールバック関数に渡される値。監視対象オブジェクトとは別に保持されます。
- unregisterToken = target: 登録を解除するために使用されるトークン。省略された場合は、
targetが使用されます。
戻り値(return)
undefined
FinalizationRegistry.prototype.register() は、ファイナライゼーションレジストリにオブジェクトを登録するメソッドです。このメソッドは、登録が正常に行われた場合、undefined を返します。