可能调用的自定义函数列表
list of custom functions that might be called
有没有办法获得所有将/可能被调用到数组的自定义函数名?示例:
<button onclick="foo()">lol</button>
<script>function foo(){
alert("clicked");
}
function boo(){
alert("clicked");
}
</script>
应返回数组中的foo
,而不是boo
在这里,函数foo可能不会被调用,但我仍然希望有一个代码中所有自定义函数的列表(数组?)(不一定被调用)。只是澄清一下:我想知道函数是否会被调用,如果它存在的话,我也不需要知道它是否会被执行。我如何才能有效地做到这一点?
编辑:我想用它来代替我以前使用的显式声明:
使用blah,而新的隐式声明唯一应该做的就是找到函数名,将它们与函数列表(数组)进行比较,并将匹配项写入另一个数组
简单地说,在实际调用之前是不可能知道的。函数的调用方式有很多种。例如,这些都将调用foo()
:
foo();
window.foo();
this.foo();
window['foo']();
eval('foo()');
eval('foo')();
window['f'+'o'+'o']();
// and so on
唯一可行的方法是从window
对象中获取所有函数,然后进行正则表达式搜索以调用它们。显而易见的警告是,它不会抓住我上面的大多数例子。
如果您想从onclick
属性获得任何调用(而不仅仅是查找JavaScript中定义的函数),可以使用:
var elems = document.querySelectorAll('*');
var clickAttributeCode = [];
for (var i = 0; i < elems.length; i++) {
if (elems[i].onclick) {
clickAttributeCode.push(elems[i].getAttribute('onclick'));
console.log(elems[i].getAttribute('onclick'));
}
}
这不会得到动态附加的事件,只有实际放置在 onclick=""
-html属性中的事件。这一点很重要,因为这不是绑定事件的推荐方式。举例来说,以下内容将找不到:
function go() {
}
document.getElementById('blah').onclick = go;
已添加注释
假设你想做一个";"按需加载";,您几乎可以通过检测丢失的函数然后加载它来做到这一点,例如使用window.onerror
并解析错误以查找丢失的函数名。问题是消息因浏览器而异,所以这将是一个非常脆弱的系统。以下是在未定义函数时调用doIt()
可以得到的两条错误消息。
"doIt"是未定义的
ReferenceError:doIt未定义
然而。。。有更好的方法。如果你想要模块加载(这似乎是你在评论中暗示的),你可以使用RequireJS在浏览器中按需加载部分程序。这是一种非常成熟的方法。
相关文章:
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- 自定义函数中的光标位置
- Google Sheet自定义函数返回0
- 其中是自定义函数中的属性
- 创建自定义函数以在函数上运行完整的多选下拉列表
- Google Sheets自定义函数条件格式
- dalek回调或自定义函数
- UI网格:如何从自定义函数访问MODEL_COL_FIELD
- 评估作为参数传递给 Google 电子表格中自定义函数的条件
- 具有自定义函数调用的 HTML 表单
- 使用 jQuery 对动态创建的元素调用自定义函数
- CodeMirror自定义提示列表工作不正常
- 从自定义函数返回promise
- extjs-使用传递的参数创建自定义函数
- AngularJS DI用于自定义函数
- Javascript 自定义函数错误
- 如何使用Angular 1.5组件将属性求值为字符串,这是一个自定义函数
- 为谷歌工作表创建一个自定义函数
- 可能调用的自定义函数列表
- 使用自定义函数从字典中创建列表/数组