この記事は編集レビューを必要としています。ぜひご協力ください。
この翻訳は不完全です。英語から この記事を翻訳 してください。
これは 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] = barandproxy.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) | ? | ? | ? |