この記事は編集レビューを必要としています。ぜひご協力ください。
この翻訳は不完全です。英語から この記事を翻訳 してください。
これは Harmony(ECMAScript 6) 提案の一部であり、実験段階の技術です。
この技術の仕様は安定していません。ブラウザ互換性の一覧表を確認してください。またこれらの構文や動作は、仕様変更などにより、新しいバージョンのブラウザでは変更される可能性があるという点に注意してください。
概要
プロパティ値を設定することに対するトラップです。
構文
var p = new Proxy(target, { set: function(target, property, value, receiver) { } });
引数
次の引数はset
メソッドに渡されます。this
はハンドラにバインドされます。
target
- ターゲットオブジェクト
property
- 設定するプロパティの名称
value
- 設定するプロパティの新しい値
receiver
- 割り当てがもともと行われていたオブジェクト。これは通常プロキシ自身です。しかし、
set
ハンドラは内部的にプロトタイプチェーンや様々な他の方法経由で呼ばれます。 - 例えば、 スクリプト
obj.name = "jen"
があります。obj
はプロキシではなく、独自プロパティ.name
を持っていません。しかし、プロトタイプチェーンでプロキシを持っています。そのプロキシのset
ハンドラが呼ばれて、obj
はreceiverとして渡されます。
戻り値
set
メソッドはboolean値を返します。割り当てが成功したことを示すためにtrue
を返します。set
メソッドがfalse
を返して、strict-modeコードで割り当てが起こったら、TypeError
がスローされます。
説明
handler.set
メソッドはプロパティ値を設定することに対するトラップです。
インターセプト
このトラップは下記の操作をインターセプトします。:
- プロパティの割り当て:
proxy[foo] = bar
andproxy.foo = bar
- 継承したプロパティの割り当て:
Object.create(proxy)[foo] = bar
Reflect.set()
不変条件
次の不変条件に違反している場合、プロキシはTypeError
をスローします。:
- 対応するターゲットオブジェクトプロパティが書き込み不可で、非設定のデータプロパティなら、対応するターゲットオブジェクトプロパティと違うためプロパティの値を変更することができません。
- 対応するターゲットオブジェクトプロパティが[[Set]]属性として
undefined
を持つ非設定のアクセスプロパティなら、プロパティの値を設定できません。 - 厳格なモードでは、
set
ハンドラからのfalse
戻り値はTypeError
例外をスローします。
例
次のコードではプロパティ値を設定してトラップします。
var p = new Proxy({}, { set: function(target, prop, value, receiver) { console.log("called: " + prop + " = " + value); return true; } }); p.a = 10; // "called: a = 10"
仕様
仕様 | 状況 | コメント |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) The definition of '[[Set]]' in that specification. |
Standard | Initial definition. |
ブラウザ実装状況
機能 | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
基本サポート | ? | 18 (18) | ? | ? | ? |
機能 | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
基本サポート | ? | ? | 18.0 (18) | ? | ? | ? |