Skip to content

Commit

Permalink
2023/11/08 時点の英語版に基づき更新
Browse files Browse the repository at this point in the history
  • Loading branch information
mfuji09 committed Nov 12, 2024
1 parent b6b897e commit 416ee1d
Showing 1 changed file with 3 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
title: Proxy.revocable()
slug: Web/JavaScript/Reference/Global_Objects/Proxy/revocable
l10n:
sourceCommit: fcd80ee4c8477b6f73553bfada841781cf74cf46
sourceCommit: 41cddfdaeed4a73fb8234c332150df8e54df31e9
---

{{JSRef}}
Expand Down Expand Up @@ -35,11 +35,11 @@ Proxy.revocable(target, handler)

`Proxy.revocable()` はファクトリー関数で、[`Proxy()`](/ja/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy) コンストラクターと同じですが、プロキシーオブジェクトを作成するだけでなく、プロキシーを無効にするために求められる `revoke` 関数を作成します。プロキシーオブジェクトと `revoke` 関数はプレーンオブジェクトにラップされています。

`revoke` 関数は引数を取らず、`this` 値にも頼りません。作成された `proxy` オブジェクトは `revoke` 関数に[プライベートプロパティ](/ja/docs/Web/JavaScript/Reference/Classes/Private_class_fields)として結び付けられ、`revoke` 関数が呼び出されたときに自分自身でアクセスします(プライベートプロパティの存在は外からは観測できませんが、ガーベジコレクションが発生する方法については影響があります)。`proxy` オブジェクトは `revoke` 関数の[クロージャ](/ja/docs/Web/JavaScript/Closures)内には収容されません(`revoke` がまだ生きている場合、`proxy` のガベージコレクションは不可能になります)。
`revoke` 関数は引数を取らず、`this` 値にも頼りません。作成された `proxy` オブジェクトは `revoke` 関数に[プライベートプロパティ](/ja/docs/Web/JavaScript/Reference/Classes/Private_properties)として結び付けられ、`revoke` 関数が呼び出されたときに自分自身でアクセスします(プライベートプロパティの存在は外からは観測できませんが、ガーベジコレクションが発生する方法については影響があります)。`proxy` オブジェクトは `revoke` 関数の[クロージャ](/ja/docs/Web/JavaScript/Closures)内には収容されません(`revoke` がまだ生きている場合、`proxy` のガベージコレクションは不可能になります)。

`revoke()` 関数が呼び出された後、プロキシーは使用できなくなります。ハンドラーのトラップが発生すると {{jsxref("TypeError")}} が発生します。一度プロキシーが取り消されると、取り消されたままになり、再び `revoke()` を呼び出しても何の効果もありません。実際、`revoke()` を呼び出すと `proxy` オブジェクトを `revoke` 関数から切り離すので、`revoke` 関数が再びプロキシーにアクセスできることは全くありません。プロキシーが他の場所で参照されていない場合、ガベージコレクションの対象となります。`revoke` 関数は `target` と `handler` も `proxy` から切り離すので、`target` が他の場所で参照されていない場合、プロキシーがまだ生きていても、対象のオブジェクトと意味のあるやりとりをする方法がなくなったので、それもガベージコレクションの対象となります。

ユーザーが取り消し可能なプロキシーを通してオブジェクトと対話することで、ユーザーに公開されるオブジェクトの[ライフタイムを制御](/ja/docs/Web/JavaScript/Memory_Management)できます。ユーザーがまだそのプロキシーを参照しているときでも、オブジェクトをガベージコレクション可能にすることができます。
ユーザーが取り消し可能なプロキシーを通してオブジェクトと対話することで、ユーザーに公開されるオブジェクトの[ライフタイムを制御](/ja/docs/Web/JavaScript/Memory_management)できます。ユーザーがまだそのプロキシーを参照しているときでも、オブジェクトをガベージコレクション可能にすることができます。

##

Expand Down

0 comments on commit 416ee1d

Please sign in to comment.