--- title: Proxy.revocable() slug: Web/JavaScript/Reference/Global_Objects/Proxy/revocable tags: - ECMAScript 2015 - JavaScript - Method - Proxy translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/revocable ---
{{JSRef}}

Proxy.revocable() メソッドは、取り消し可能な {{jsxref("Proxy")}} オブジェクトを作成できます。

構文

Proxy.revocable(target, handler);

引数

target
Proxy でラップする対象のオブジェクトです。これは一連のオブジェクト、例えばネイティブの配列、関数、他の. Proxy などを取ることもできます。
handler
オブジェクトで、プロパティが操作が実行されたときのプロキシ p の動作を定義する関数であるものです。

返値

新しく作成された取り消し可能な Proxy オブジェクト。

解説

取り消し可能な Proxy は次の2つのプロパティ {proxy: proxy, revoke: revoke} を持ったオブジェクトです。

proxy
new Proxy(target, handler) 呼び出しで生成したプロキシオブジェクトです。
revoke
proxy を無効にするための引数を持たない関数です。

revoke() 関数を呼ぶと、プロキシオブジェクトは使用できなくなり、ハンドラーへのどんなトラップも {{jsxref("TypeError")}} をスローします。プロキシが取り消されると、取り消されたままになり、ガベージコレクションの対象となります。再度 revoke() が呼ばれても影響はありません。

var revocable = Proxy.revocable({}, {
  get: function(target, name) {
    return "[[" + name + "]]";
  }
});
var proxy = revocable.proxy;
console.log(proxy.foo); // "[[foo]]"

revocable.revoke();

console.log(proxy.foo); // TypeError is thrown
proxy.foo = 1           // TypeError again
delete proxy.foo;       // still TypeError
typeof proxy            // "object", typeof doesn't trigger any trap

仕様書

仕様書
{{SpecName('ESDraft', '#sec-proxy.revocable', 'Proxy Revocation Functions')}}

ブラウザーの互換性

{{Compat("javascript.builtins.Proxy.revocable")}}

関連情報