List内置JavaScript标准对象方法

时间:2013-03-29 03:41:43

标签: javascript node.js rhino

有没有办法列出所有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 个答案:

答案 0 :(得分:5)

不会 dir 为您提供所需内容吗?

console.log(dir(method))

编辑:

这样可行(尝试John Resig's Blog了解更多信息):

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"]

答案 1 :(得分:0)

您应该能够通过检查属性类型来获取方法列表,如here所述

同时尝试getOwnPropertyNames

答案 2 :(得分:0)

答案 3 :(得分: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人员,但我猜想发生这种情况的原因是因为bindtoStringcallapply可能会从更高的继承继承等级(在这种情况下甚至有意义吗?)

编辑:顺便说一句,这是我实现的,它可以在原型中尽可能地看到它。

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;
}