FinalizationRegistry.prototype.register()

Baseline 廣泛可用 *

此特性已得到良好支援,可在多種裝置和瀏覽器版本上使用。自 2021 年 4 月起,所有瀏覽器均已支援此特性。

* 此特性的某些部分可能存在不同級別的支援。

register() 方法用於將一個值註冊到 FinalizationRegistry 例項中,以便在該值被垃圾回收時,可以呼叫登錄檔的 [callback function](https://mdn.club.tw/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry#callback_function) 。

語法

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

引數

目標

要註冊的目標值。

heldValue

要傳遞給此 target 的 finalizer 的值。它不能是 target 本身,但可以是任何其他內容,包括函式和原始型別。

unregisterToken 可選

一個可用於稍後透過 unregister 方法取消註冊目標值的 token。如果提供了此引數(且不為 undefined),則它必須是一個物件或一個 [未註冊的 Symbol](https://mdn.club.tw/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#shared_symbols_in_the_global_symbol_registry)。如果未提供,則無法取消註冊目標。

返回值

無(undefined)。

異常

TypeError

在以下情況之一中丟擲

  • target 不是一個物件或一個 [未註冊的 Symbol](https://mdn.club.tw/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#shared_symbols_in_the_global_symbol_registry)(與原始型別相對,函式也是物件)
  • targetheldValue 相同 (target === heldValue)
  • unregisterToken 不是一個物件或一個 [未註冊的 Symbol](https://mdn.club.tw/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#shared_symbols_in_the_global_symbol_registry)

描述

有關重要的注意事項,請參閱 FinalizationRegistry 頁面的 [Avoid where possible](https://mdn.club.tw/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry#avoid_where_possible) 和 [Notes on cleanup callbacks](https://mdn.club.tw/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry#notes_on_cleanup_callbacks) 部分。

示例

使用 register

以下程式碼註冊了由 target 引用的值,傳遞了 held 值 "some value",並將 target 本身作為 unregistration token:

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

以下程式碼註冊了由 target 引用的值,傳遞了另一個物件作為 held 值,並且沒有傳遞任何 unregistration token(這意味著 target 無法被取消註冊):

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

規範

規範
ECMAScript® 2026 語言規範
# sec-finalization-registry.prototype.register

瀏覽器相容性

另見