Proxy.revocable()

Proxy.revocable() メソッドは、取り消し可能な Proxy オブジェクトを作成するために使用します。

構文

Proxy.revocable(target, handler);

引数

target

Proxy でラップする対象のオブジェクトです。これは一連のオブジェクト、例えばネイティブの配列、関数、他のプロキシーなどを取ることもできます。

handler

プロキシー p に対して操作が行われたときの動作を定義する関数をプロパティとするオブジェクトです。

返値

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

解説

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

proxy

new Proxy(target, handler) 呼び出しで生成したプロキシーオブジェクトです。

revoke

proxy を無効にするための引数を持たない関数です。

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

Proxy.revocable の使用

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 が発生
proxy.foo = 1           // TypeError が発生
delete proxy.foo;       // これも TypeError
typeof proxy            // "object" と表示。 typeof でトラップは発生しない

仕様書

Specification
ECMAScript Language Specification
# sec-proxy.revocable

ブラウザーの互換性

BCD tables only load in the browser

関連情報