2013-09-23 37 views
0

我試圖調用另一個內的JS功能,但使用參數指定的函數。即,取決於傳入的參數,它將調用一個不同的函數呼叫基礎上,論證一個js函數傳遞

function toggle(n){ 
     if (sessionStorage['toggle'+n]== 0){ 

      check+n();  
     } 
     else 
    } 

因此,例如,如果參數「氣球」被作爲Ñ通過,那麼它將調用函數checkBalloons()。 "check+n();"目前沒有在這裏工作。對不起,我缺乏簡單的js語法!

+0

考慮一下,如果這將是更好地使通用的'check'這需要參數'N'。 –

回答

3

如果該函數在全局範圍內(瀏覽器)中定義的,你可以這樣做:

window["check"+n](); 

或部分租戶像Node.js你可以從全局對象訪問它。

global["check"+n](); 

如果它是一些其他對象的一部分,那麼你會這樣做。對象上定義

obj["check"+n](); 

功能和性能可使用[]公約以及進行訪問。即obj["propFuncName"]會給你參考,所以如果你添加方法,你可以添加()來調用它。

+0

謝謝,這是有效的。不過,我將不得不閱讀功能的範圍,因爲我不確定要使用哪個功能。不過感謝您的幫助。 – gavin

+0

@ gavin歡迎您... – PSL

0

如果你是這樣的:

if (sessionStorage['toggle'+n]== 0){ 

     window["check" + n](); 
    } 

將工作

+0

ok ....出於興趣,窗口部分是什麼?我以爲我只是沒有正確寫出語法? – gavin

+0

您正在訪問您的方法作爲對象屬性。您的代碼中設置的每個全局變量或函數(未設置爲其他函數)都將設置在您的窗口對象中。 –

+0

調用函數只能輸入「check()」,與您調用「window.check()」或「window [」check「]()相同的東西」 –

2

如果函數是全局的,你可以這樣做:

window["check" + n](); 

,或者你可以把你的函數中的對象,像這樣:

myNamespace = {}; 
myNamespace.checkSomething = function(){ /* ... */ } 

// call it like this: 
myNamespace["check" + n](); 
1

的答案迄今是正確的,但沒有解釋。

在JavaScript中,你可以叫不上名字時,這個名字是一個字符串調用一個函數。你可以可以做的是通過名稱從對象中檢索一個值,如果該值恰好是一個函數,則可以調用它。例如:

var myObject = {}; 
myObject.myFunction = function() { alert('test!'); }; 

// Get the property on `myObject` called `myFunction` 
var theFunctionLookup = myObject['myFunction']; 
// Since that property was a function, you can call it! 
theFunctionLookup(); 

在瀏覽器中,在全球範圍內定義的功能被附加到window對象。例如,這個工程:

function myFunction() { alert('test'); } 
var theFunctionLookup = window['myFunction']; 
theFunctionLookup(); 

您可以在最後兩行縮短到一個:

function myFunction() { alert('test'); } 
// Look up and call the function in one line. 
window['myFunction'](); 

出於同樣的原因,你可以使用動態計算的字符串查找功能。

function checkBalloon() { 
    alert('checking balloon'); 
} 

function toggle(n){ 
    if (sessionStorage['toggle'+n]== 0){ 
    window['check' + n](); 
    check+n();  
    } 
} 

toggle('Balloon'); 
+0

+1對所有各種問題/選項的完整解釋。 – jfriend00