11

This question is intentionally phrased like this question.

I don't even know if this is possible, I remember vaguely hearing something about some properties not enumerable in JS.

Anyway, to cut a long story short: I'm developing something on a js framework for which I have no documentation and no easy access to the code, and it would greatly help to know what I can do with my objects.

4 Answers 4

16

If you include Underscore.js in your project, you can use _.functions(yourObject).

Sign up to request clarification or add additional context in comments.

Comments

11

I think this is what you are looking for:

var obj = { locaMethod: function() { alert("hello"); }, a: "b", c: 2 };
for(var p in obj)
{
    if(typeof obj[p] === "function") {
      // its a function if you get here
    }
}

Comments

3

You should be able to enumerate methods that are set directly on an object, e.g.:

var obj = { locaMethod: function() { alert("hello"); } };

But most methods will belong to the object's prototype, like so:

var Obj = function ObjClass() {};
Obj.prototype.inheritedMethod = function() { alert("hello"); };
var obj = new Obj();

So in that case you could discover the inherited methods by enumerating the properties of Obj.prototype.

1 Comment

This is the issue I am running into in practice. I'll get everything that is in my object, but not Obj.prototype, and then if I remember, put my code here as an answer. I think this is introspection. Is there another term for this?
1

You can use the following:

var obj = { locaMethod: function() { alert("hello"); }, a: "b", c: 2 };


for(var p in obj)
{
    console.log(p + ": " + obj[p]); //if you have installed Firebug.
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.