1. ホーム
  2. javascript

[解決済み] クラスの関数(メソッド)を取得する(重複)

2023-03-12 14:14:55

質問

ES6クラスのプロパティと関数を動的に取得する必要があります。これは可能なのでしょうか?

for...inループを使用して、私はクラスインスタンスのプロパティを通してのみループすることができます。

class Foo {
  constructor() {
    this.bar = "hi";
  }
  someFunc() {
    console.log(this.bar);
  }
}
var foo = new Foo();
for (var idx in foo) {
  console.log(idx);
}

出力します。

bar

どのように解決するのですか?

この関数は、すべての関数を取得します。継承されているか否か、列挙可能か否か。すべての関数が含まれます。

function getAllFuncs(toCheck) {
    const props = [];
    let obj = toCheck;
    do {
        props.push(...Object.getOwnPropertyNames(obj));
    } while (obj = Object.getPrototypeOf(obj));
    
    return props.sort().filter((e, i, arr) => { 
       if (e!=arr[i+1] && typeof toCheck[e] == 'function') return true;
    });
}

テストを行う

getAllFuncs([1,3]);

コンソール出力です。

["constructor", "toString", "toLocaleString", "join", "pop", "push", "concat", "reverse", "shift", "unshift", "slice", "splice", "sort", "filter", "forEach", "some", "every", "map", "indexOf", "lastIndexOf", "reduce", "reduceRight", "entries", "keys", "constructor", "toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "__defineGetter__", "__lookupGetter__", "__defineSetter__", "__lookupSetter__"]

注意

シンボルで定義された関数は返さない。