2013-06-24 55 views
0

因此,我已經想出瞭如何在字符串中包含方法名稱時調用JavaScript中的方法,例如但是,我收到以下錯誤消息,指出它無法找到該方法,並且在研究後我仍然不確定原因。嘗試使用字符串調用方法名稱:未捕獲TypeError:Object [object global]沒有方法

調用由實際名稱作品的方法,而不是通過使用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

它看起來像方法的變通方法'targetMethod'不是一個全球性的方法,這就是爲什麼您正在收到錯誤消息。 如果您已將其聲明爲封閉方法,那麼您無法使用此方法訪問它 –

+0

您是否可以將更多上下文分享給代碼?比如這些函數是否在另一個函數中聲明等 –

+0

對不起,我是JavaScript新手 - 感謝downvote! - 上面的代碼是確切的代碼減去通過ajax調用獲取結果的填充符。 –

回答

2

從評論中的討論看來,問題在於聲明回調方法的上下文。如果您使用window[callback],它預計在全球範圍內聲明回調給我,在您的情況下,它似乎並非如此。這可能是因爲你已經聲明瞭一個匿名函數/ dom中的所有內容,爲該函數創建一個閉包上下文。

作爲解決方案,我建議不要將回調作爲函數名稱字符串傳遞,而應將其作爲函數引用傳遞。

因此,您不需要撥打startMethod('targetMethod');,而需要撥打startMethod(targetMethod);並使用strCallback()而不是window[strCallback](results);調用回叫。

我的解決方案,我們在評論中摸索出只是我們被迫回調到全球範圍內這是不推薦的方法

+0

謝謝,這甚至更好 –

相關問題