Is there a way to print all methods of an object?

Viewed 79089

Is there a way to print all methods of an object in JavaScript?

6 Answers

Sure:

function getMethods(obj) {
  var result = [];
  for (var id in obj) {
    try {
      if (typeof(obj[id]) == "function") {
        result.push(id + ": " + obj[id].toString());
      }
    } catch (err) {
      result.push(id + ": inaccessible");
    }
  }
  return result;
}

Using it:

alert(getMethods(document).join("\n"));

If you just want to look what is inside an object, you can print all object's keys. Some of them can be variables, some - methods.

The method is not very accurate, however it's really quick:

console.log(Object.keys(obj));

Take a gander at this code:-

function writeLn(s)
{
    //your code to write a line to stdout
    WScript.Echo(s)
}

function Base() {}
Base.prototype.methodA = function() {}
Base.prototype.attribA = "hello"

var derived = new Base()
derived.methodB = function() {}
derived.attribB = "world";

function getMethods(obj)
{
    var retVal = {}

    for (var candidate in obj)
    {
        if (typeof(obj[candidate]) == "function")
            retVal[candidate] = {func: obj[candidate], inherited: !obj.hasOwnProperty(candidate)}
    }
    return retVal
}

var result = getMethods(derived)
for (var name in result)
{
    writeLn(name + " is " + (result[name].inherited ? "" : "not") + " inherited")
}

The getMethod function returns the set of methods along with whether the method is one that has been inherited from a prototype.

Note that if you intend to use this on objects that are supplied from the context such as browser/DOM object then it won't work IE.

From here:

Example 1: This example writes out all the properties of the "navigator" object, plus their values:

for (var myprop in navigator){
 document.write(myprop+": "+navigator[myprop]+"<br>")
}

Just replace 'navigator' with whatever object you are interested in and you should be good to go.

As mentioned by Anthony in the comments section - This returns all attributes not just methods as the question asked for.

Oops! That'll teach me to try and answer a question in a language I don't know. Still, I think the code is useful - just not what was required.

Since methods in JavaScript are just properties that are functions, the for..in loop will enumerate them with an exception - it won't enumerate built-in methods. As far as I know, there is no way to enumerate built-in methods. And you can't declare your own methods or properties on an object that aren't enumerable this way.

Related