Movatterモバイル変換


[0]ホーム

URL:


  1. 開発者向けのウェブ技術
  2. JavaScript
  3. JavaScript リファレンス
  4. 標準組み込みオブジェクト
  5. Proxy
  6. Proxy()
  7. ownKeys()

このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docsコミュニティーについてもっと知り、仲間になるにはこちらから。

View in EnglishAlways switch to English

handler.ownKeys()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨2016年9月⁩.

handler.ownKeys() メソッドは、オブジェクトの[[OwnPropertyKeys]]内部メソッドに対するトラップです。Object.keys(),Reflect.ownKeys() などの操作で使用されます。

試してみましょう

const monster = {  _age: 111,  [Symbol("secret")]: "I am scared!",  eyeCount: 4,};const handler = {  ownKeys(target) {    return Reflect.ownKeys(target);  },};const proxy = new Proxy(monster, handler);for (const key of Object.keys(proxy)) {  console.log(key);  // 予想される結果: "_age"  // 予想される結果: "eyeCount"}

構文

js
new Proxy(target, {  ownKeys(target) {  }})

引数

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

target

ターゲットオブジェクトです。

返値

ownKeys() メソッドは配列風オブジェクトを返す必要があります。それぞれの要素はString またはSymbol であり、重複するアイテムを含んではいけません。

解説

介入

このトラップは下記の操作に介入できます。

他にも、[[OwnPropertyKeys]]内部メソッドを呼び出すあらゆる操作に介入できます。

不変条件

プロキシーの[[OwnPropertyKeys]] 内部メソッドでは、ハンドラー定義が以下の不変条件のいずれかに違反する場合、TypeError が発生します。

  • 結果がObject である。
  • キーのリストには重複する値が含まれていない。
  • それぞれのキーの型がString またはSymbol のどちらかである。
  • 結果リストには、ターゲットオブジェクトのすべての構成不可の自己プロパティのキーが含まれていなければならない。つまり、ターゲットオブジェクトに対してReflect.ownKeys() が返すすべてのキーについて、そのキーがReflect.getOwnPropertyDescriptor() によってconfigurable: false を返す場合、そのキーは結果リストに含まれていなければならない。
  • 対象オブジェクトが拡張不可の場合、結果リストには対象オブジェクトの自己プロパティのすべてのキーが含まれ、それ以外の値は含まれてはいけない。つまり、Reflect.isExtensible()targetfalse を返す場合、結果リストにはReflect.ownKeys()target に適用した結果と同じ値が含まれなければならない。

getOwnPropertyNames のトラップ

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

js
const p = new Proxy(  {},  {    ownKeys(target) {      console.log("called");      return ["a", "b", "c"];    },  },);console.log(Object.getOwnPropertyNames(p));// "called"// [ 'a', 'b', 'c' ]

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

js
const obj = {};Object.defineProperty(obj, "a", {  configurable: false,  enumerable: true,  value: 10,});const p = new Proxy(obj, {  ownKeys(target) {    return [123, 12.5, true, false, undefined, null, {}, []];  },});console.log(Object.getOwnPropertyNames(p));// TypeError: proxy [[OwnPropertyKeys]] must return an array// with only string and symbol elements

仕様書

Specification
ECMAScript® 2026 Language Specification
# sec-proxy-object-internal-methods-and-internal-slots-ownpropertykeys

ブラウザーの互換性

関連情報

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp