Is there a way to list all JavaScript standard object method?
I mean I'm trying to get all the built in methods of String so I was thinking and I did tried doing this:
for( var method in String ) {
console.log( method );
}
// I also tried this:
for( var method in String.prototype ) {
console.log( method );
}
But no luck. Also if there is a way that solution should work for all ECMAScript standard classes/objects.
Edit: I want to point out that the solution should work in server side environment also like rhino or node.js.
And as much as possible not using a third party API/framework.
Won't dir give you what you need?
console.log(dir(method))
EDIT:
This would work (try John Resig's Blog for more info):
Object.getOwnPropertyNames(Object.prototype) gives :
["constructor", "toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "__defineGetter__", "__lookupGetter__", "__defineSetter__", "__lookupSetter__"]
Object.getOwnPropertyNames(Object) gives :
["length", "name", "arguments", "caller", "prototype", "keys", "create", "defineProperty", "defineProperties", "freeze", "getPrototypeOf", "getOwnPropertyDescriptor", "getOwnPropertyNames", "is", "isExtensible", "isFrozen", "isSealed", "preventExtensions", "seal"]
You should be able to get the list of methods by checking the type of properties as explained here
Also try getOwnPropertyNames
I got the answer from this post How to display all methods in a JavaScript object?
Thanks to CiannanSims
So here is a way to squeeze out a few more properties:
> 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' ]
I am not a javascript person but I would guess that the reason that this happens is because bind, toString, call and apply might be inherited from higher inheritance levels (does that even make sense in this context?)
EDIT: Btw here is one i implemented that looks as far back in the prototypes as it can.
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;
}