2017-08-10 53 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

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