尝试使用字符串调用方法名称:Uncaught TypeError:Object [object global]没有方法

时间:2013-06-24 03:29:02

标签: javascript

所以,当你在字符串中有方法名称时,我已经想出了如何在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');

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

从注释中的讨论看,问题是声明回调方法的上下文。如果你使用window[callback],它期望在全局上下文中声明对我的回调,在你的情况下,它似乎不是这种情况。这可能是因为你已经在匿名函数/ dom中声明了所有内容,为函数创建了一个闭包上下文。

作为一种解决方案,我建议不要将回调作为函数名称字符串传递,而是将其作为函数引用传递。

因此,您无需拨打startMethod('targetMethod');,而是使用startMethod(targetMethod);而不是strCallback()来调用window[strCallback](results);并调用回调。

我在评论中解决的解决方案只是一种解决方法,我们强制回调到全局范围,这不是推荐的方法