handler.getOwnPropertyDescriptor()Object.getOwnPropertyDescriptor() に対するトラップです。

構文

var p = new Proxy(target, {
  getOwnPropertyDescriptor: function(target, prop) {
  }
});

引数

次の引数は getOwnPropertyDescriptor メソッドに渡されます。this はハンドラにバインドされます。

target
ターゲットオブジェクトです。
prop
ディスクリプタを取得されるプロパティ名です。

戻り値

getOwnPropertyDescriptor メソッドはオブジェクト、または undefined を返さなければなりません。

説明

handler.getOwnPropertyDescriptor() メソッドは Object.getOwnPropertyDescriptor() に対するトラップです。

インターセプト

このトラップは下記の操作をインターセプトできます。:

不変条件

次の不変条件に違反している場合、プロキシは TypeError をスローします。:

  • getOwnPropertyDescriptor はオブジェクトか、または undefined を返さなければなりません。
  • プロパティがターゲットオブジェクトの設定不可な独自のプロパティとして存在する場合、存在しないとして報告されてはいけません。
  • プロパティがターゲットオブジェクトの独自のプロパティとして存在し、そのターゲットオブジェクトが拡張不可の場合、存在しないとして報告されてはいけません。
  • プロパティがターゲットオブジェクトの独自のプロパティとして存在せず、そのターゲットオブジェクトが拡張不可の場合、存在するとして報告されてはいけません。
  • プロパティがターゲットオブジェクトの独自のプロパティとして存在しないか、ターゲットオブジェクトの設定可能な独自のプロパティとして存在している場合、設定不可であるとして報告されてはいけません。
  • Object.getOwnPropertyDescriptor(target) の結果を Object.defineProperty に使用した時に、ターゲットオブジェクトに適用でき、例外をスローしません。

次のコードでは Object.getOwnPropertyDescriptor() をトラップします。

var p = new Proxy({ a: 20 }, {
  getOwnPropertyDescriptor: function(target, prop) {
    console.log('called: ' + prop);
    return { configurable: true, enumerable: true, value: 10 };
  }
});

console.log(Object.getOwnPropertyDescriptor(p, 'a').value); // "called: a"
                                                            // 10

次のコードでは不変条件に違反します。

var obj = { a: 10 };
Object.preventExtensions(obj);
var p = new Proxy(obj, {
  getOwnPropertyDescriptor: function(target, prop) {
    return undefined;
  }
});

Object.getOwnPropertyDescriptor(p, 'a'); // TypeError is thrown

仕様

仕様 状況 コメント
ECMAScript 2015 (6th Edition, ECMA-262)
[[GetOwnProperty]] の定義
標準 初期定義
ECMAScript Latest Draft (ECMA-262)
[[GetOwnProperty]] の定義
ドラフト  

ブラウザ実装状況

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeEdge MobileAndroid 版 FirefoxAndroid 版 OperaiOS 版 SafariSamsung InternetNode.js
基本対応Chrome 完全対応 49Edge 完全対応 12Firefox 完全対応 18IE 未対応 なしOpera 完全対応 36Safari 完全対応 10WebView Android 完全対応 49Chrome Android 完全対応 49Edge Mobile 完全対応 ありFirefox Android 完全対応 18Opera Android 完全対応 36Safari iOS 完全対応 10Samsung Internet Android 完全対応 5.0nodejs 完全対応 6.0.0

凡例

完全対応  
完全対応
未対応  
未対応

関連情報

ドキュメントのタグと貢献者

このページの貢献者: segayuu, SphinxKnight, shide55
最終更新者: segayuu,