2015-10-01 119 views
-6

我想知道是否有方法使用變量名而不是函數。 即,如何在JavaScript中使用變量而不是函數名稱

function dialog(a,b) { 
    a(b); 
} 

示例:如果用戶通過'alert'a和內容發送到b。 然後它應該提醒b

如果a'confirm',那麼它應該確認b

我可以使用開關櫃或其他,但我想知道上述是可能的。

+0

哦,哦。我誤解了你的問題。 Mods:請忽略國旗。 – bwDraco

+0

你是否在傳遞字符串「alert」,「confirm」或函數'alert'和'confirm'?後者工作正常 - 即「對話框(警報,'hello world')'警報和'確認'也適用。我絕對不會使用'eval'解決方案。 – caasjj

+0

另一個選項是'dialog('alert','Hello World')''和window [a](b);'。 – Xufox

回答

1

使用.call()

function callme(a,b){ 
    return a.call(null, b); 
}; 

var func = function(c) { 
    return c; 
}; 

alert(callme(func, "test")); 

傳遞給callme任何功能將執行那裏。第一個參數是上下文,所以如果需要,您可以通過this。否則通過null

在你的情況下,可以通過alert/confirm。如果你不需要返回一些東西,只需在最後做一個空的返回。

請勿使用eval,因爲對所有事物都很好。

1

我認爲你正在尋找eval() method,但如果你不小心,它可能導致insecurities

可能只是用戶提供它們本身的功能,如果在你的榜樣,他們在原函數傳遞爲a,但我假設你希望他們通過這名字是得到一個函數的字符串用過的。

function(a, b) { 
    eval(a + '(' + b + ')'); 
} 
+2

'對話框(alert,'Hello World')'有什麼問題? – caasjj

+0

@caasjj嗯......除了它不存在嗎?如果您可以將我引薦到MDN文章或其他類型的文檔,我很樂意閱讀它。 –

+0

對不起,什麼不存在?他定義了函數'dialog','alert'是一個全局函數,另一個參數是一個字符串。順便說一句,你的解決方案是一個JavaScript語法錯誤:) – caasjj

相關問題