2

すべての JavaScript 標準オブジェクト メソッドを一覧表示する方法はありますか?

私は String のすべての組み込みメソッドを取得しようとしているので、考えていたので、これをやってみました:

for( var method in String ) {
    console.log( method );
}

// I also tried this:
for( var method in String.prototype ) {
    console.log( method );
}

しかし、運がありません。また、そのソリューションがすべての ECMAScript 標準クラス/オブジェクトに対して機能する方法がある場合。

編集: ソリューションは、rhino や node.js などのサーバー側環境でも機能する必要があることを指摘したいと思います。

また、サードパーティの API/フレームワークをできるだけ使用しないようにします。

4

4 に答える 4

5

dirはあなたが必要とするものを与えてくれませんか?

console.log(dir(method))

編集:

これは機能します (詳細については、 John Resig のブログを試してください)。

Object.getOwnPropertyNames(Object.prototype)与える:

["constructor", "toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "__defineGetter__", "__lookupGetter__", "__defineSetter__", "__lookupSetter__"]

Object.getOwnPropertyNames(Object)与える:

["length", "name", "arguments", "caller", "prototype", "keys", "create", "defineProperty", "defineProperties", "freeze", "getPrototypeOf", "getOwnPropertyDescriptor", "getOwnPropertyNames", "is", "isExtensible", "isFrozen", "isSealed", "preventExtensions", "seal"]
于 2013-03-29T03:44:09.347 に答える
0

この投稿から答えを得ました Javascriptでオブジェクトのすべてのメソッドを表示する方法は?

CiannanSimsに感謝

于 2013-03-29T04:08:04.500 に答える
0

here で説明されているように、プロパティのタイプを確認することで、メソッドのリストを取得できるはずです

getOwnPropertyNamesも試してください

于 2013-03-29T03:49:06.897 に答える
0

したがって、さらにいくつかのプロパティを絞り出す方法は次のとおりです。

> function a () {}
undefined
> Object.getOwnPropertyNames(a)
[ 'length',
  'name',
  'arguments',
  'caller',
  'prototype' ]
> a.bind
[Function: bind]
> // Oops, I wanted that aswell
undefined
> Object.getOwnPropertyNames(Object.getPrototypeOf(a))
[ 'length',
  'name',
  'arguments',
  'caller',
  'constructor',
  'bind',
  'toString',
  'call',
  'apply' ]

私はJavaScriptの人ではありませんが、これが発生する理由は、bindtoStringcallおよびapplyがより高い継承レベルから継承される可能性があるためだと思います(このコンテキストでも意味がありますか?)

編集:ところで、これは私が実装したもので、プロトタイプを可能な限りさかのぼります。

function getAttrs(obj) {
    var ret = Object.getOwnPropertyNames(obj);
    while (true) {
        obj = Object.getPrototypeOf(obj);
        try {
            var arr = Object.getOwnPropertyNames(obj);
        } catch (e) {
            break;
        }

        for (var i=0; i<arr.length; i++) {
            if (ret.indexOf(arr[i]) == -1)
                ret.push(arr[i]);
        }
    }

    return ret;
}
于 2014-10-01T12:45:33.957 に答える