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

IT技术 javascript function
2021-02-25 02:45:44

是否可以在 JavaScript 中获取用户定义函数的列表?

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

var functionNames = [];

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

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

function addEventListener() { 
    [native code] 
}

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

正如 Chetan Sastry 在他的回答中所建议的那样,您可以检查[native code]字符串化函数内部是否存在

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

使用 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是一个全局对象。thing.makeGreeting是一个函数,但不是全局的。这些东西都不应该被抓住。
2021-04-30 02:45:44