2017-03-07 4 views
0

はDIR()関数がありますどのオブジェクトのすべてのメソッドを取得しますか? Pythonの単語で

リターンJSの言葉で

は、私が発見したオブジェクトに対して有効な属性のリスト:

Object.getOwnPropertyNames 

Object.keys 

しかし、彼らはドン」すべての属性を表示:

> Object.getOwnPropertyNames([]) 
[ 'length' ] 

Hすべての属性とメソッドのリストを取得するには、

concat, entries, every, find.... 

for Array()などがあります。

+2

[JavaScriptのオブジェクトのすべてのメソッドを印刷する方法はありますか?](http://stackoverflow.com/questions/152483/is-there-a-way-to-print-all-methods)オブジェクトのin-javascript) –

+0

@ ErikBrodyDreyer - その質問は実際には重複しません。なぜなら、2008年には、列挙できないプロパティ名を取得する方法がなかったからです。 – RobG

答えて

1

Object.getOwnPropertyNames(Array.prototype)

あなたは、単一のインスタンスのプロパティ名を要求しているので、あなたが投稿方法は動作しない値を取得しようと、ある理由Arrayオブジェクトのいくつかの理由から、各インスタンスはそのインスタンスに対してユニークのプロパティ値しか持たないでしょう。 Array.prototypeにある値は、特定のインスタンスに対して一意ではないため、すべての配列がlengthの同じ値を共有するわけではありません。Arrayのすべてのインスタンスで共有/継承されます。

1

Object.getOwnPropertyNamesObject.getPrototypeOfを使用すると、プロトタイプチェーンをトラバースし、各オブジェクトのすべてのプロパティを収集できます。

var result = [] 
 
var obj = [] 
 
do { 
 
    result.push(...Object.getOwnPropertyNames(obj)) 
 
} while ((obj = Object.getPrototypeOf(obj))) 
 

 
document.querySelector("pre").textContent = result.join("\n")
<pre></pre>

これは関係なく、それらが継承されたか列挙しているかどうかのすべてのプロパティを処理します。ただし、これにはSymbolのプロパティは含まれません。それらを含めるには、Object.getOwnPropertySymbolsを使用できます。

var result = [] 
var obj = [] 
do { 
    result.push(...Object.getOwnPropertyNames(obj), ...Object.getOwnPropertySymbols(obj)) 
} while ((obj = Object.getPrototypeOf(obj))) 
+0

OPはメソッドを必要とするため、Functionオブジェクト(または少なくとも呼び出し可能なオブジェクト)のフィルタが必要です。 – RobG

+0

@RobG:多分。 OPには「属性とメソッド」*が記述されているため、どれくらいの量を含めるべきか正確には分かりません。 –

+0

はい、質問は少し不明です。 – RobG

0

あなたはObject.getOwnPropertyNames()方法は、指定されたオブジェクト上に直接検出されたすべてのプロパティ(列挙か否か)の配列を返しObject.getOwnPropertyNames

使用することができます。

console.log(Object.getOwnPropertyNames(Array.prototype));
.as-console-wrapper { max-height: 100% !important; top: 0; }

関連する問題