JavaScript中全局用户定义函数的列表?

JavaScript中全局用户定义函数的列表?,javascript,function,Javascript,Function,可以在JavaScript中获得用户定义函数的列表吗 我目前正在使用它,但它返回的函数不是用户定义的: var functionNames = []; for (var f in window) { if (window.hasOwnProperty(f) && typeof window[f] === 'function') { functionNames.push(f); } } 我假设您想过滤掉本机函数。在Firefox中,Functio

可以在JavaScript中获得用户定义函数的列表吗

我目前正在使用它,但它返回的函数不是用户定义的:

var functionNames = [];

for (var f in window) {
    if (window.hasOwnProperty(f) && typeof window[f] === 'function') {
        functionNames.push(f);
    }
}

我假设您想过滤掉本机函数。在Firefox中,
Function.toString()
返回函数体,对于本机函数,函数体的形式如下:

function addEventListener() { 
    [native code] 
}

您可以匹配循环中的模式
/\[native code\]/
,并省略匹配的函数。

使用Internet Explorer:

var objs = [];
var thing = {
  makeGreeting: function(text) {
    return 'Hello ' + text + '!';
  }
}

for (var obj in window){window.hasOwnProperty(obj) && typeof window[obj] === 'function')objs.push(obj)};

未能报告“thing”。

正如Chetan Sastry在回答中所建议的,您可以检查字符串化函数中是否存在
[本机代码]

Object.keys(window).filter(function(x)
{
    if (!(window[x] instanceof Function)) return false;
    return !/\[native code\]/.test(window[x].toString()) ? true : false;
});
或者简单地说:

Object.keys(window).filter(function(x)
{
    return window[x] instanceof Function && !/\[native code\]/.test(window[x].toString());
});
在chrome中,您可以通过以下方式获得所有非本机变量和函数:

Object.keys(window);

在Firefox中,这给出了预期的结果,即全局对象窗口上的所有函数。你指的是什么误报?我还想知道你说的是什么误报?我还注意到您没有声明f,因此如果它是函数的一部分,它将在全局范围内结束。
thing
是一个全局对象<代码>东西。makeGreeting是一个函数,但不是全局函数。这两件事都不应该被抓住。