0

因此,当您在字符串中包含方法名称时,我已经弄清楚了如何在 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');

谢谢你的帮助。

4

1 回答 1

2

从评论中的讨论看来,问题在于声明回调方法的上下文。如果您使用window[callback]它,则需要在全局上下文中声明对我的回调,在您的情况下,情况似乎并非如此。这可能是因为您已经在匿名函数/dom 中声明了所有内容,准备为该函数创建闭包上下文。

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

因此startMethod('targetMethod');,您需要使用而不是调用startMethod(targetMethod);和调用回调而不是调用。strCallback()window[strCallback](results);

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

于 2013-06-24T03:50:35.013 回答