2013-02-10 84 views
0

我的項目中有一個彈出系統。通過名稱,例如「addnews」,它知道要添加哪個彈出內容以及處理表單所需的腳本。直到現在完成後,我總是做同樣的事情。現在,在某些情況下,我想要做一些不同的事情。檢查javascript函數是否存在變量並執行它

現在我想添加一個與前面的例子'addnews()'相同名稱的JavaScript函數,並檢查該函數是否存在。如果它運行它,否則做標準的事情。 (1)

同時執行一個名稱爲變量的函數似乎不起作用。 (2)

var functionName = 'addnews'; 

if (typeof functionName == 'function') { // (1) typeof functionName = string 
    window[functionName](); // (2) this doesn't work for me 
} else { 
    // Do something standard 
} 

function addnews() { 
    // Do something special 
} 
+0

我不太清楚你想達到的目標。爲什麼你必須測試一個函數是否存在?你試圖解決的問題是什麼? *「在完成之後,我總是做同樣的事情,現在,在某些情況下,我想做一些不同的事情。」*我想這是你的核心問題,但爲了正確地幫助你,你必須詳細說明這一點。 – 2013-02-10 00:13:45

回答

3

如果您在文檔中使用此代碼並且未加載complielly,則代碼將無法找到addnews()函數,因爲它在此代碼之前未聲明。

像評論:你需要使用

if (typeof window[functionName] == 'function') 
+0

這不是問題所在。 – 2013-02-10 00:20:35

+0

你知道他的完整代碼嗎? :)我在一些項目中也使用這個代碼,它工作正常。 – Mic 2013-02-10 00:22:35

+0

'typeof functionName'總是一個字符串。 – 2013-02-10 00:23:28

0

這將做到這一點:

if (typeof eval(functionName) == 'function') { 
    eval(functionName+'()'); 
} else { 
    // Do something standard 
} 

更新:只有當話筒不工作的答案(whyever)使用。就像他說的,eval是非常危險的。

+1

只有當輸入可能來自不同於用戶或網站本身的來源(例如來自其他用戶的輸入)時,「eval」纔是危險的。除了潛在的危險之外,使用它只會導致更難維護代碼和(可能不必要的)性能開銷。 – 2013-02-10 01:22:09

相關問題