1. ホーム
  2. ジャバスクリプト

[解決済み】オブジェクトのすべてのメソッドを表示するには?

2022-04-16 04:35:35

質問

例えば、あるオブジェクトに対して利用可能なすべてのメソッドをリストアップする方法を知りたいのです。

 alert(show_all_methods(Math));

これが印刷されるはずです。

abs, acos, asin, atan, atan2, ceil, cos, exp, floor, log, max, min, pow, random,round, sin, sqrt, tan, …

解決方法は?

を使用することができます。 Object.getOwnPropertyNames() を使用すると、列挙可能かどうかにかかわらず、オブジェクトに属するすべてのプロパティを取得することができます。 例えば

console.log(Object.getOwnPropertyNames(Math));
//-> ["E", "LN10", "LN2", "LOG2E", "LOG10E", "PI", ...etc ]

次に filter() を使えば、メソッドだけを取得することができます。

console.log(Object.getOwnPropertyNames(Math).filter(function (p) {
    return typeof Math[p] === 'function';
}));
//-> ["random", "abs", "acos", "asin", "atan", "ceil", "cos", "exp", ...etc ]


ES3 ブラウザ(IE 8以下)では、組み込みオブジェクトのプロパティは列挙できません。 のようなオブジェクトは windowdocument は組み込みではなく、ブラウザによって定義され、ほとんどの場合、設計上、列挙可能です。

から ECMA-262 第3版 :

グローバルオブジェクト

には、一意のグローバル オブジェクト(15.1)が作成される前に作成されます。 制御がどの実行コンテキストにも入る。 初期状態では、グローバルオブジェクトは のプロパティは以下の通りです。

- 内蔵の Math、String、Date.Data.Data.Data.Data.Data.Data などのオブジェクトがあります。 parseInt など。 これらには属性 { DontEnum } です。 .

- ホスト定義の追加 プロパティを指定します。これには プロパティで、その値はグローバル オブジェクトそのものです。 HTMLドキュメントオブジェクトモデルでは、ウィンドウ プロパティは、グローバルオブジェクトの グローバルオブジェクトそのものです。

制御 が実行コンテキストに入るとき、そして ECMAScriptのコードが実行される。 にプロパティが追加されることがあります。 グローバルオブジェクトと初期 のプロパティが変更されることがある。

これは、それらのオブジェクトがGlobalオブジェクトの列挙可能なプロパティではないことを意味していることを指摘しておく必要があります。 仕様書の残りの部分に目を通すと、これらのオブジェクトの組み込みプロパティやメソッドのほとんどに { DontEnum } 属性が設定されています。


更新情報:SO仲間のCMSさんが に関するIEのバグ { DontEnum } をご覧ください。

Microsoft] JScript は、DontEnum 属性をチェックする代わりに、オブジェクトのプロトタイプチェーンにある同名のプロパティが DontEnum 属性を持っている場合、そのオブジェクトのすべてのプロパティをスキップするようになりました。

要するに、オブジェクトのプロパティに名前を付けるときは注意しましょう。 もし同じ名前の組み込みのプロトタイププロパティやメソッドがあれば、IE は for...in ループを使用します。