2017-08-10 54 views
0

我的問題很簡單。在Php中,你可以調用一個包含函數名稱中的字符串的函數。例如:Javascript:使用字符串來調用函數

function setName(name){ 
    $this->name = name; 
} 

$string = 'Name'; 
$method = 'set'.$string; 
if(method_exists($this, $method) 
    $this->$method($_POST['name']); 

,所以我想知道是否有這樣的事情在Javascript中......現在,我使用一個開關來檢查身體的id和調用該函數。這是我的代碼:

switch($('body').attr('id')) 
{ 
    case 'index': 
     app.index.init(); 
     break; 
    case 'login': 
     app.login.inint(); 
     break; 
}; 

app.index = { 
    init : function(){ 
     console.log('Hola Mundo'); 
    } 
}; 

所以我在想,如果我能做出這樣的事情:

var id = $('body').attr('id'); 
app.id.init(); 

謝謝您的回答。

+2

你可以做到這一點,應用程序是一個對象,你可以通過引用屬性通過應用程序[myVar]保存在變量中的字符串。然而,與使用定義了明確函數名稱的開關相比,它不太安全。 – James

回答

0

它可以做到。您不必在交換機中檢查它。由於id屬性是一個字符串值,這樣你就可以使用objectInstance[prop]方式直接檢查屬性是否存在,如果那麼它存在,你可以安全地調用它:

app.index = { 
    init : function(){ 
     console.log('Hola Mundo'); 
    } 
}; 
app.login = { 
    init : function(){ 
     console.log('Hola Mundo'); 
    } 
}; 
var appProp = $('body').attr('id'); /* or var id = $('body').id; */ 
if(app[appProp]){ 
    app[appProp].init(); 
} 
+0

工作就像一個魅力!非常感謝你! :) –

2

是的。

app[id].init(); 

但是考慮到,如果你的身體的ID沒有在應用程序對象定義,因爲詹姆斯已經指出,這可能會導致錯誤。

+0

感謝您的回答,像魅力一樣工作! :) –