最近は AWS Lambda 上の Node.js で動くアプリケーションづくりをしているのだけど、まぁ掲題のようなことをしたいと思いたって書いたので残しておく。
listupGetter.js
'use strict';
// lodash とかの isFunctionでいいっす
const isFunction = (any) => {
const str = Object.prototype.toString.call(any);
return /^\[object (Generator)?Function\]$/.test(str);
}
const listupGetter = (obj) => {
// プロトタイプ(クラス)取得
const proto = Object.getPrototypeOf(obj);
// Object.getOwnPropertyNames: プロトタイプ(クラス)で定義されているプロパティを全部取得
return Object.getOwnPropertyNames(proto).filter((v) => {
// そのうち、デスクリプタとして get があるものだけフィルタリング
const descriptor = Object.getOwnPropertyDescriptor(proto, v);
return isFunction(descriptor.get);
});
}
isFunction(descriptor.get) のところを書き換えれば setter だけ取ったりも出来る。