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

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


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

Here is an ES6 sample.

// Get the Object's methods names:
function getMethodsNames(obj = this) {
    return Object.keys(obj)
        .filter((key) => typeof obj[key] === 'function');
}

// Get the Object's methods (functions):
function getMethods(obj = this) {
    return Object.keys(obj)
        .filter((key) => typeof obj[key] === 'function')
        .map((key) => obj[key]);
}

obj = this is an ES6 default parameter, you can pass in an Object or it will default to this.

Object.keys returns an Array of the Object's own enumerable properties. Over the window Object it will return [..., 'localStorage', ...'location'].

(param) => ... is an ES6 arrow function, it's a shorthand for

function(param) {
    return ...
}

with an implicit return.

Array.filter creates a new array with all elements that pass the test (typeof obj[key] === 'function').

Array.map creates a new array with the results of calling a provided function on every element in this array (return obj[key]).


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.