ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript で列挙不可能な継承プロパティ名を取得するにはどうすればよいですか?

JavaScript で列挙不可能な継承プロパティ名を取得するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-09 04:23:02
オリジナル
188 人が閲覧しました

How Do You Retrieve Non-Enumerable Inherited Property Names in JavaScript?

JavaScript での列挙不可能な継承プロパティ名の取得

JavaScript では、オブジェクトのプロパティへのアクセスはオブジェクトの操作に不可欠です。プロパティを取得するにはさまざまな方法が存在しますが、それぞれが特定のプロパティ タイプに焦点を当てています。これにより、オブジェクトの列挙不可能なプロパティや独自のプロパティにアクセスしようとするときに問題が発生します。

プロパティのタイプについて

JavaScript のプロパティは、次の 3 つのタイプに分類できます。

  • 独自のプロパティ: で直接定義オブジェクト自体。
  • 継承プロパティ: オブジェクトのプロトタイプ チェーンから継承。
  • 列挙可能なプロパティ: Object.keys() または~のためにloop.
  • 列挙不可能なプロパティ: Object.keys() または for...in ループの結果には含まれません。

課題

問題は、列挙不可能なものを取得しようとすると発生します。オブジェクトの非所有プロパティ。 Object.keys() や for...in ループなどの従来のメソッドでは、これらのプロパティは提供されません。

解決策: プロトタイプ チェーンのトラバース

非列挙可能な非独自プロパティを使用して、オブジェクトのプロトタイプ チェーンを横断するカスタム関数を作成できます。この関数は、Object.getOwnPropertyNames() を利用して、プロトタイプ チェーンから継承されたものを含む列挙不可能なプロパティを取得します。

関数例

function getAllProperties(obj) {
  var allProps = [];
  var curr = obj;

  do {
    var props = Object.getOwnPropertyNames(curr);
    props.forEach(function(prop) {
      if (allProps.indexOf(prop) === -1) {
        allProps.push(prop);
      }
    });
  } while ((curr = Object.getPrototypeOf(curr)));

  return allProps;
}

console.log(getAllProperties([1, 2, 3]));
ログイン後にコピー

出力:

[ "0", "1", "2", "length" ]
ログイン後にコピー

以上がJavaScript で列挙不可能な継承プロパティ名を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート