有没有办法列出所有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 /框架。
答案 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所述
答案 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人员,但我猜想发生这种情况的原因是因为bind
,toString
,call
和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;
}