2017-08-10 12 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をチェックして、関数を呼び出すためにスイッチを使用しています。これは私のコードです:あなたの答えのための

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

感謝:私はこのような何かを作ることができれば

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

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

は、だから私は思っていました。

+2

あなたはそれを行うことができ、アプリが対象であり、あなたがしてプロパティを参照することができますapp [myVar]を介して変数に保持されている文字列。しかし、明確な関数名が定義されたスイッチを使用するよりも安全性が低くなります。 – James

答えて

0

できます。スイッチでチェックする必要はありません。あなたがobjectInstance[prop]方法を使用して直接施設の存在を確認することができ、それが存在する場合は、あなたが安全にそれを呼び出すことができるようにid属性は文字列値であるとして:

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が、Appオブジェクトで定義されていない場合は、このエラーを引き起こす可能性があることを考えます。

+0

あなたの答えをありがとう、魅力的なように働いた! :) –

関連する問題