2016-09-27 9 views
4

Node.jsのクラスで利用可能な関数のリストをコマンドラインで取得するだけのクリーンで簡単な方法を見つけようとしています。Node.jsのクラスで使用可能な関数のリストを取得する

以前のウェブ検索に基づいて、私はObject.getOwnPropertyNames()を見つけましたが、この機能は矛盾していると思われます。そうでなければ、一部のクラスでは動作する理由はわかりません。

例を試してみてください。誰かが助けてくれるかもしれません。現在、ノード-vはこの例ではv4.4.5を出力します。

まず、Mathクラスの関数のリストを取得したいとします。ノードコンソールからは、これがうまくいく、私は得る:

[[email protected] /]# node 
> Object.getOwnPropertyNames(Math) 
[ 'E', 
    'LN10', 
    'LN2', 
    'LOG2E', 
    'LOG10E', 
    'PI', 
    'SQRT1_2', 
    'SQRT2', 
    'random', 
    'abs', 
    'acos', 
    'asin', 
    'atan', 
    'ceil', 
    'exp', 
    'floor', 
    'log', 
    'round', 
    'sqrt', 
    'atan2', 
    'pow', 
    'max', 
    'min', 
    'imul', 
    'sign', 
    'trunc', 
    'tanh', 
    'asinh', 
    'acosh', 
    'atanh', 
    'hypot', 
    'fround', 
    'clz32', 
    'cbrt', 
    'cos', 
    'sin', 
    'tan', 
    'sinh', 
    'cosh', 
    'log10', 
    'log2', 
    'log1p', 
    'expm1' ] 
> 

クール。それは動作します。 http.Server

さて、Node.jsのは、サーバー側のプログラミングについての詳細であることから、同じことは、Node.jsのための例のほぼすべてのシングル「Hello World」の形で使用される一般的なクラスのために動作するかどうかを見てみましょう

のは、同じことを試してみましょう:

> Object.getOwnPropertyNames(http.Server) 
[ 'length', 'name', 'prototype', 'super_' ] 

うーん....ドキュメントhereにこれを比較し、server.close()server.listen()のような基本的な事柄を欠けているようです。さらにドキュメントを見ると、このクラスはnet.Serverのサブクラスなので、代わりにそのクラスのメソッドを見なければならないかもしれません。それが動作するかどうか見てみましょう:

> Object.getOwnPropertyNames(net.Server) 
[ 'length', 'name', 'prototype', 'super_' ] 

うーん...私たちはnet.Serverのドキュメントを比較すると、私たちはserver.address()server.getConnections()などのような基本的な機能を逃しています。

誰も私を理解するのに役立ちます:

(a)はなぜgetOwnPropertyNamesは (b)は単にリストに別の「公式」の方法がありますいくつかのクラスではなく、他人のためにすべての方法を示しているようだ、と...そのようなリストを取得するためにAPI docsを読み込むことなく、Node.js内のオブジェクトに利用可能な関数はありますか?

+0

'getOwnPropertyNames'にはありません。プロトタイプツリーに登るすべての継承プロパティを取得するには、 'for..in'ループを使用します。 – 4castle

+0

よろしくお願いいたします。コマンドラインで動作する簡単な例を教えてもらえますか? 'prototype'属性をループしますか? –

答えて

0

あなたがgetOwnPropertyNamesためdocsを見ればあなたが表示されます。あなただけの列挙のプロパティを使用する場合は、Object.keysを(参照

を)またはのために...ループで使用(注ただし、このことそのオブジェクトには直接見つからない列挙可能なプロパティが返されますが、オブジェクトのプロトタイプチェーンにはもあります。ただし、後者はhasOwnProperty()でフィルタリングされます。

これが何を言っていることは、両方のgetOwnPropertyNames() & Object.keys()のみオブジェクト自体に列挙のプロパティを返します、そしてあなたにオブジェクトのプロトタイプについての情報を与えないということです。

だから、あなたが望むものを達成するための機能が組み込まれていないように思われるので、自分でコードを作成する必要があります。たとえば、次のように

for (var prop in obj) { 
    console.log('obj.' + prop + ' = ' + obj[prop]); 
} 

注:あなたは、あなたがそれを実行したい任意のプロジェクトに含めることができるようにこのアイデアをラップする、独自のユーティリティライブラリを作ることができ

+1

マット - ありがとう!これは私の質問の一部をクリアします。私はあなたのループを 'http.Server'に示す小さなデモンストレーションファイルを作った。 これは、他の人があなたの提案を簡単に試すことを可能にするはずです: ' var http = require( 'http'); var serverObj =新しいhttp.Server(); for(var prop in serverObj){ //console.log('serverObj。 '+ prop +' = '+ serverObj [prop]); console.log( 'serverObj。' + prop); } ' オリジナルのソリューションでは、各機能のソースコードとして表示されるものも表示されます。私はただプロパティ名を表示するように修正しました。 –

+0

投票/マークすることを忘れないでください;) –

関連する問題