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