0

是否可以获取 JavaScript 对象中的所有函数?

考虑以下对象:

var myObject = 
{ 
    method: function () 
    { 
        this.nestedMethod = function () 
        { 
        } 
    },
    anotherMethod: function() { } 
});

如果我将它传递给下面的函数,我会得到这个结果:

method
anotherMethod

(获取所有函数名的函数)

function properties(obj) 
{
    var output = "";
    for (var prop in obj) {
        output += prop + "<br />";
        try
        {
            properties(obj[prop]);
        }
        catch(e){}
    }
    return output;
}

我怎样才能使这个输出:

method
nestedMethod
anothermethod
4

2 回答 2

3

nestedMethod仅在运行函数后创建。

您可以调用对象上的每个函数来查看它们是否创建了更多函数,但这是一个可怕的想法。

于 2013-07-23T19:08:07.907 回答
0

您正在遍历对象的元素。对象中的函数不是对象。因此,只需从函数创建一个对象,然后对其进行迭代以检查它。

这有效:

function properties(obj) {
    var output = "";
    for (var prop in obj) {
        output += prop + "<br />";

        // Create object from function        
        var temp = new obj[prop]();

        output += properties(temp);
    }

    return output;
}

小提琴:http: //jsfiddle.net/Stijntjhe/b6r62/

虽然它有点脏,但它不考虑争论。

于 2013-07-23T19:16:00.543 回答