handler.set()
handler.set()
はプロパティの値を設定することに対するトラップです。
試してみましょう
構文
const p = new Proxy(target, { set: function(target, property, value, receiver) { } });
引数
次の引数は set()
メソッドに渡されます。this
はハンドラーにバインドされます。
target
-
ターゲットオブジェクトです。
property
-
プロパティを設定する名前または
Symbol
です。 value
-
設定するプロパティの新しい値です。
receiver
-
割り当てがもともと行われていたオブジェクトです。これは通常、プロキシそのものです。しかし、
set()
ハンドラーは内部的にプロトタイプチェーンや様々な他の方法経由で呼び出されます。メモ: 例: スクリプト上に
obj.name = "jen"
があり、obj
はプロキシではなく、独自の.name
プロパティを持っていません。しかし、プロトタイプチェーンでプロキシを持っています。その場合、そのプロキシのset()
ハンドラが呼ばれて、obj
は receiver として渡されます。
返値
set()
メソッドは真偽値を返します。
true
を返すと割り当てが成功したことを示します。set()
メソッドの返値がfalse
で、厳格モードで割り当てが起こった場合、TypeError
が発生します。
解説
handler.set
メソッドはプロパティの値を設定することに対するトラップです。
介入
このトラップは下記の操作に介入できます。
- プロパティの割り当て:
proxy[foo] = bar
やproxy.foo = bar
- 継承したプロパティの割り当て:
Object.create(proxy)[foo] = bar
Reflect.set()
不変条件
例
プロパティ値の設定のトラップ
次のコードではプロパティの値の設定をトラップします。
const p = new Proxy({}, {
set: function(target, prop, value, receiver) {
target[prop] = value;
console.log('property set: ' + prop + ' = ' + value);
return true;
}
})
console.log('a' in p); // false
p.a = 10; // "property set: a = 10"
console.log('a' in p); // true
console.log(p.a); // 10
仕様書
Specification |
---|
ECMAScript Language Specification # sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver |
ブラウザーの互換性
BCD tables only load in the browser