是否可以在JavaScript中获取用户定义函数的列表?
我目前正在使用它,但它返回非用户定义的函数:
var functionNames = [];
for (var f in window) {
if (window.hasOwnProperty(f) && typeof window[f] === 'function') {
functionNames.push(f);
}
}
答案 0 :(得分:19)
我假设您要过滤掉本机功能。在Firefox中,Function.toString()
返回函数体,对于本机函数,它将采用以下形式:
function addEventListener() {
[native code]
}
您可以匹配循环中的模式/\[native code\]/
并省略匹配的函数。
答案 1 :(得分:9)
正如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);
答案 2 :(得分:-3)
使用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)};
未能报告'事情'。