Javascript 如何使用窗口[functionName]引用非全局函数?
我正在制作一个类似JS的框架。我希望用户能够向特定操作添加功能,就像wordpress插件一样:Javascript 如何使用窗口[functionName]引用非全局函数?,javascript,jquery,Javascript,Jquery,我正在制作一个类似JS的框架。我希望用户能够向特定操作添加功能,就像wordpress插件一样: add_action("wp_head", "functionName"); 我看了其他的问题,最受欢迎的答案是 window['functionName'] 但是,当函数“functionName”不是全局的,而是位于$(document.ready({})中时,我该如何做呢;例如它抛出一个错误Uncaught TypeError:无法调用未定义的方法“call” 还有一个选项,即将用户函数作
add_action("wp_head", "functionName");
我看了其他的问题,最受欢迎的答案是
window['functionName']
但是,当函数“functionName”不是全局的,而是位于$(document.ready({})中时,我该如何做呢;例如它抛出一个错误Uncaught TypeError:无法调用未定义的方法“call”
还有一个选项,即将用户函数作为参数传递给add_action(如果我们假设我的函数也将命名为add_action):
但我有一种预感,这将是非常低效的,而且是一种错误的方法。你不能。但是,如果绝对必须拥有全局函数,则可以将其固定到jQuery对象上:
$.yourSpecialFunction = function() {
// ...
};
更糟糕的是,您可以将其添加到窗口中
:
window.yourSpecialFunction = function() {
// ...
}
但实际上没有理由这样做。您可以将这些函数放在自己的对象上,并在文档中使用。就绪函数:
$(document).ready(function() {
var fns = {};
fns.myFunc = function() {};
// execute the function by name
var fnName = "myFunc";
fns[fnName]();
});
或者,如果要在document.ready()作用域之外引用它,可以将其放在window对象上,并将其设置为您自己的命名空间全局:
$(document).ready(function() {
window.myFunctionTable = {};
window.myFunctionTable.myFunc = function() {};
});
// execute the function by name
var fnName = "myFunc";
window.myFunctionTable[fnName]();
理想情况下,你真的想给你的应用命名——所以你有
window.MY_APP={…}代码>
或者随便什么,然后将整个框架的所有方法/属性/模块添加到该名称空间。最后一种方法——传入函数——实际上是最好的方法。这既不是低效的,也不是错误的。在其他函数触发操作时添加一组要执行的函数称为“事件处理”。不知道为什么会被否决……您是说您将有一组预定义函数供用户选择,或者用户可以以某种方式定义自己的函数?所以这里的解决方案是将函数作为参数传递?嗯。。。什么?对什么的争论?
$(document).ready(function() {
window.myFunctionTable = {};
window.myFunctionTable.myFunc = function() {};
});
// execute the function by name
var fnName = "myFunc";
window.myFunctionTable[fnName]();