How to get an object's methods?

JavascriptFunctionObjectMethodsGet

Javascript Problem Overview


Is there a method or propertie to get all methods from an object? For example:

function foo() {}
foo.prototype.a = function() {}
foo.prototype.b = function() {}

foo.get_methods(); // returns ['a', 'b'];

UPDATE: Are there any method like that in Jquery?

Thank you.

Javascript Solutions


Solution 1 - Javascript

function getMethods(obj)
{
	var res = [];
    for(var m in obj) {
		if(typeof obj[m] == "function") {
			res.push(m)
		}
	}
	return res;
}

Solution 2 - Javascript

Remember that technically javascript objects don't have methods. They have properties, some of which may be function objects. That means that you can enumerate the methods in an object just like you can enumerate the properties. This (or something close to this) should work:

var bar
for (bar in foo)
{
    console.log("Foo has property " + bar);
}

There are complications to this because some properties of objects aren't enumerable so you won't be able to find every function on the object.

Solution 3 - Javascript

You can use console.dir(object) to write that objects properties to the console.

Solution 4 - Javascript

In modern browsers you can use Object.getOwnPropertyNames to get all properties (both enumerable and non-enumerable) on an object. For instance:

function Person ( age, name ) {
    this.age = age;
    this.name = name;
}

Person.prototype.greet = function () {
    return "My name is " + this.name;
};

Person.prototype.age = function () {
    this.age = this.age + 1;
};

// ["constructor", "greet", "age"]
Object.getOwnPropertyNames( Person.prototype );

Note that this only retrieves own-properties, so it will not return properties found elsewhere on the prototype chain. That, however, doesn't appear to be your request so I will assume this approach is sufficient.

If you would only like to see enumerable properties, you can instead use Object.keys. This would return the same collection, minus the non-enumerable constructor property.

Solution 5 - Javascript

The methods can be inspected in the prototype chain of the object using the browser's developer tools (F12):

  console.log(yourJSObject);

or more directly

  console.dir(yourJSObject.__proto__);

Solution 6 - Javascript

for me, the only reliable way to get the methods of the final extending class, was to do like this:

function getMethodsOf(obj){
  const methods = {}
  Object.getOwnPropertyNames( Object.getPrototypeOf(obj) ).forEach(methodName => {
    methods[methodName] = obj[methodName]
  })
  return methods
}

Solution 7 - Javascript

In ES6:

let myObj   = {myFn : function() {}, tamato: true};
let allKeys = Object.keys(myObj);
let fnKeys  = allKeys.filter(key => typeof myObj[key] == 'function');
console.log(fnKeys);
// output: ["myFn"]

Solution 8 - Javascript

var funcs = []
for(var name in myObject) {
    if(typeof myObject[name] === 'function') {
        funcs.push(name)
    }
}

I'm on a phone with no semi colons :) but that is the general idea.

Solution 9 - Javascript

var methods = [];
for (var key in foo.prototype) {
    if (typeof foo.prototype[key] === "function") {
         methods.push(key);
    }
}

You can simply loop over the prototype of a constructor and extract all methods.

Solution 10 - Javascript

the best way is:

let methods = Object.getOwnPropertyNames(yourobject);
console.log(methods)

use 'let' only in es6, use 'var' instead

Solution 11 - Javascript

In Chrome is keys(foo.prototype). Returns ["a", "b"].

See: https://developer.chrome.com/devtools/docs/commandline-api#keysobject[![enter image description here]1]1

Later edit: If you need to copy it quick (for bigger objects), do copy(keys(foo.prototype)) and you will have it in the clipboard.

Solution 12 - Javascript

Get the Method Names:

var getMethodNames = function (obj) {
    return (Object.getOwnPropertyNames(obj).filter(function (key) {
        return obj[key] && (typeof obj[key] === "function");
    }));
};

Or, Get the Methods:

var getMethods     = function (obj) {
    return (Object.getOwnPropertyNames(obj).filter(function (key) {
        return obj[key] && (typeof obj[key] === "function");
    })).map(function (key) {
        return obj[key];
    });
};

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionthomView Question on Stackoverflow
Solution 1 - JavascriptMakram SalehView Answer on Stackoverflow
Solution 2 - JavascriptLarry OstermanView Answer on Stackoverflow
Solution 3 - JavascriptpstenstrmView Answer on Stackoverflow
Solution 4 - JavascriptSampsonView Answer on Stackoverflow
Solution 5 - JavascriptMatoeilView Answer on Stackoverflow
Solution 6 - JavascriptDevTheJoView Answer on Stackoverflow
Solution 7 - JavascriptKevin BealView Answer on Stackoverflow
Solution 8 - JavascriptMatt GreerView Answer on Stackoverflow
Solution 9 - JavascriptRaynosView Answer on Stackoverflow
Solution 10 - JavascriptArturo Morales RangelView Answer on Stackoverflow
Solution 11 - JavascriptȘerban GhițăView Answer on Stackoverflow
Solution 12 - JavascriptsidanmorView Answer on Stackoverflow