3

この関数の一般化を介して、特定の Javascript オブジェクトのすべてのプロパティ (非表示のものを含む) を自動的に決定したいと思います。

function keys(obj) {
    var ll = [];
    for(var pp in obj) {
        ll.push(pp);
    }
    return ll;
}

これはユーザー定義オブジェクトでは機能しますが、多くのビルトインでは失敗します:

repl> keys({"a":10,"b":2});  // ["a","b"]
repl> keys(Math) // returns nothing!

基本的に、Python の dir() と help() に相当するものを書きたいと思います。これらは、新しいオブジェクトを探索するのに非常に役立ちます。

私の理解では、組み込みオブジェクトのみが非表示のプロパティを持っているため (ユーザー コードは明らかにHTML5 まで「列挙可能な」プロパティを設定できません)、1 つの可能性は、Math、String などのプロパティを dir() に相当するものに単純にハードコードすることです。 (こちらのようなリストを使用)。しかし、より良い方法はありますか?

編集:わかりました。これまでに見た中で最良の答えは、このスレッドにあります。これを独自の JS コードで簡単に行うことはできませんが、次善の策は、Chrome の開発者ツール (Chrome -> ビュー -> 開発者 -> 開発者ツール) で console.dir を使用することです。console.dir(Math) を実行し、三角形のドリルダウンをクリックしてすべてのメソッドを一覧表示します。ほとんどのインタラクティブ/ディスカバリー作業にはこれで十分です (実行時にこれを行う必要はありません)。

4

4 に答える 4

6

ECMAScript 第 5 版。Object.getOwnPropertyNames列挙できないものを含む、渡されたオブジェクトのすべてのプロパティの配列を返す定義。これまでのところ、これを実装しているのは Chrome だけです。

Object.getOwnPropertyNames({a: 10, b: 2});

与える["b", "a"](順不同)

Object.getOwnPropertyNames(Math);

与える["LN10", "PI", "E", "LOG10E", "SQRT2", "LOG2E", "SQRT1_2", "LN2", "cos", "pow", "log", "tan", "sqrt", "ceil", "asin", "abs", "max", "exp", "atan2", "random", "round", "floor", "acos", "atan", "min", "sin"]

于 2010-05-31T23:42:40.690 に答える
4

Object.getOwnPropertyNames「隠されたもの」は返されません。
Object.getOwnPropertyNames継承されていないプロパティの名前を返します。

于 2011-08-21T08:51:07.050 に答える
3

これは前の回答で説明されています。基本的に、仕様ではDontEnum、これらのオブジェクトが列挙可能ではないことを ( を使用して) 明示的に要求しています。

于 2010-05-30T21:45:35.460 に答える
0

これはfirebugでオブジェクトメソッドを見つけるために機能します。

Object.getOwnPropertyNames(数学);

于 2013-01-30T06:10:42.333 に答える