この記事は編集レビューを必要としています。ぜひご協力ください。
この翻訳は不完全です。英語から この記事を翻訳 してください。
これは Harmony(ECMAScript 6) 提案の一部であり、実験段階の技術です。
この技術の仕様は安定していません。ブラウザ互換性の一覧表を確認してください。またこれらの構文や動作は、仕様変更などにより、新しいバージョンのブラウザでは変更される可能性があるという点に注意してください。
Summary
[[GetPrototypeOf]]
内部メソッドに対するトラップです。
構文
var p = new Proxy(obj, { getPrototypeOf(target) { ... } });
引数
次の引数はgetPrototypeOf
メソッドに渡されます。this
はハンドラにバインドされます。
target
- ターゲットオブジェクト
戻り値
getPrototypeOf
メソッドはオブジェクトかnull
を返さなければなりません。
説明
インターセプト
このトラップを下記の操作をインターセプトできます。:
Object.getPrototypeOf()
Reflect.getPrototypeOf()
__proto__
Object.prototype.isPrototypeOf()
instanceof
不変条件
次の不変条件に違反している場合、プロキシは TypeError
をスローします。:
getPrototypeOf
メソッドはオブジェクトまたはnull
を返さなければなりません。target
が拡張可能でないなら、Object.getPrototypeOf(proxy)
メソッドはObject.getPrototypeOf(target)
と同じ値を返さなければなりません。
例
例: 基本的な使用
var obj = {}; var proto = {}; var handler = { getPrototypeOf(target) { console.log(target === obj); // true console.log(this === handler); // true return proto; } }; var p = new Proxy(obj, handler); console.log(Object.getPrototypeOf(p) === proto); // true
例: きっかけとなってgetPrototypeOfのトラップが起こる5つの方法
var obj = {}; var p = new Proxy(obj, { getPrototypeOf(target) { return Array.prototype; } }); console.log( Object.getPrototypeOf(p) === Array.prototype, // true Reflect.getPrototypeOf(p) === Array.prototype, // true p.__proto__ === Array.prototype, // true Array.prototype.isPrototypeOf(p), // true p instanceof Array // true );
例: 2種類の例外
var obj = {}; var p = new Proxy(obj, { getPrototypeOf(target) { return "foo"; } }); Object.getPrototypeOf(p); // TypeError: "foo" is not an object or null var obj = Object.preventExtensions({}); var p = new Proxy(obj, { getPrototypeOf(target) { return {}; } }); Object.getPrototypeOf(p); // TypeError: expected same prototype value
仕様
仕様 | ステータス | コメント |
---|---|---|
ECMAScript 6 (ECMA-262) The definition of '[[GetPrototypeOf]]' in that specification. |
勧告候補 | Initial definition. |
ブラウザ実装状況
機能 | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
基本サポート | 未サポート | 未サポート (バグ 888969) | 未サポート | 未サポート | 未サポート |
機能 | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
基本サポート | 未サポート | 未サポート | 未サポート (バグ 888969) | 未サポート | 未サポート | 未サポート |