【JavaScript】オブジェクトが持つすべてのメソッドを取得する方法
JavaScriptでは、オブジェクトへの参照を受け取り、そのオブジェクト上に存在するすべてのメソッド(メンバー関数)を配列として返すプログラム(関数)が必要になることがあります。
ここで重要なのは、返す配列にはメソッドだけを含めることです。つまり、値が文字列や数値など関数以外のデータ型であるプロパティは除外する必要があります。
解決策:Object.getOwnPropertyNames()を使う
この問題を解決するには、Object.getOwnPropertyNames() メソッドを使用します。
Object.getOwnPropertyNames() は、指定されたオブジェクトが直接持つすべてのプロパティ(列挙可能かどうかにかかわらず)を配列として返します。その後、filter() メソッドを使って、この配列から「データ型が function であるプロパティ」だけを抽出します。
実装例
実際のコードは以下のようになります。
const returnMethods = (obj = {}) => {
const members = Object.getOwnPropertyNames(obj);
const methods = members.filter(el => {
return typeof obj[el] === 'function';
})
return methods;
};
console.log(returnMethods(Array.prototype));コードのポイント
- Object.getOwnPropertyNames(obj):オブジェクト自身が直接所有する全プロパティ名(列挙不可のものも含む)を配列で取得します。
- filter():各プロパティに対して
typeof obj[el] === 'function'を判定し、値が関数型であるものだけを残します。
出力結果
コンソールには次のように表示されます。
[
'constructor', 'concat', 'copyWithin',
'fill', 'find', 'findIndex', 'lastIndexOf', 'pop', 'push',
'reverse', 'shift', 'unshift', 'slice', 'sort', 'splice',
'includes', 'indexOf', 'join',
'keys', 'entries', 'values',
'forEach', 'filter', 'flat',
'flatMap', 'map', 'every',
'some', 'reduce', 'reduceRight',
'toLocaleString', 'toString'
]
この例では Array.prototype を渡しているため、配列オブジェクトが標準で備えているすべての組み込みメソッド(push、map、filter など)が一覧として取得できていることがわかります。
なお、継承元(プロトタイプチェーン上)のメソッドまで取得したい場合は、Object.getPrototypeOf() を組み合わせて親オブジェクトを順にたどる必要があります。Object.getOwnPropertyNames() はあくまで「そのオブジェクト自身」のプロパティのみを対象とする点に注意しましょう。
-
JavaScriptのRegExp(正規表現)オブジェクトとは?基本の使い方をわかりやすく解説
RegExp(正規表現)オブジェクトは、テキストに対してパターンマッチングを行い、目的の文字列部分を検索・抽出するために使用されます。JavaScriptでは、RegExpオブジェクトを「RegExpコンストラクタ」または「リテラル構文」の2通りの方法で作成できます。 RegExpオブジェクトの作成方法 コンストラクタを使用する場合: new RegExp(pattern) リテラル構文を使用する場合: /pattern/ 主なメソッド test():文字列がパターンに一致するかどうかを真偽値(true / false)で返します。 exec():パターンに一致した文字列を返します。
-
JavaScriptのオブジェクト初期化子とは?使い方をサンプルコードで解説
オブジェクト初期化子とは オブジェクト初期化子(Object Initializer)は、新しく生成したオブジェクトを初期化するための式です。波括弧 {} の中に、「プロパティ名」と「それに対応する値」のペアを0個以上、カンマ区切りで列挙して記述します。 これにより、変数宣言と同時にオブジェクトの中身を簡単に定義することができます。 以下は、JavaScriptでオブジェクト初期化子を使用したサンプルコードです。 サンプルコード <!DOCTYPE html> <html lang="en"> <head> <meta chars