所以,当你在字符串中有方法名称时,我已经想出了如何在JavaScript中调用方法,例如strCallback = 'targetMethod'; window[strCallback]();
但是,我收到以下错误消息,指出它无法找到方法,在研究后我仍然不确定原因。
按实际名称调用方法有效,但不能使用window[strCallback]();
错误:
Uncaught TypeError: Object [object global] has no method 'targetMethod'
代码:
function startMethod(strCallback) {
var results = '...';
// window[strCallback](results); // <-- Causes error
targetMethod(results); // <-- Works
}
function targetMethod(r) {
console.debug(r);
}
startMethod('targetMethod');
感谢您的帮助。
答案 0 :(得分:2)
从注释中的讨论看,问题是声明回调方法的上下文。如果你使用window[callback]
,它期望在全局上下文中声明对我的回调,在你的情况下,它似乎不是这种情况。这可能是因为你已经在匿名函数/ dom中声明了所有内容,为函数创建了一个闭包上下文。
作为一种解决方案,我建议不要将回调作为函数名称字符串传递,而是将其作为函数引用传递。
因此,您无需拨打startMethod('targetMethod');
,而是使用startMethod(targetMethod);
而不是strCallback()
来调用window[strCallback](results);
并调用回调。
我在评论中解决的解决方案只是一种解决方法,我们强制回调到全局范围,这不是推荐的方法