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

您应该能够通过检查此处解释的属性类型来获取方法列表

也试试getOwnPropertyNames

于 2013-03-29T03:49:06.897 回答
0

我从这篇文章中得到了答案How to display all methods of an object in Javascript?

感谢CiannanSims

于 2013-03-29T04:08:04.500 回答
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 人,但我猜发生这种情况的原因是因为bind, toString, callandapply可能是从更高的继承级别继承的(这在这种情况下是否有意义?)

编辑:顺便说一句,这是我实现的一个,它尽可能地追溯到原型。

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 回答