2012-02-20 31 views
1

うまくいけば、これは正しく出てくるだろう。私は、メニューを構築し、各メニュー項目が呼び出す関数を構築する普遍的なjavascript関数を構築しています。これを行うには、各オプションのために呼び出されるコマンドのリストを渡す必要があります。例えばのでJavascript:関数コマンドを変数を介して別の関数に渡すことはできますか?

var thecall = 'alert("hi, this works");'; 

function myfunction(thecall) 
{ 
    //In here I want to excute whatever commands is listed in variable thecall 
..... 
} 

私はこの方法が完全にばかげている、それをやって確信しているが、私はこれを行う方法を他に知りません。

基本的には、私は変数に基づいて他の機能を実行する必要があります。

ありがとうございます!

答えて

1

あなたはeval()を使ったJavaScriptの任意の文字列を実行することができますが、それは(それが最善の解決策はほとんどことはない)ここにあなたのための最善の解決策ではありません。 JavaScriptで

機能を使用すると、複数の変数に同じ機能に複数の参照を保存したり、パラメータ等、としての機能の参照を渡すことができることを意味している自分自身のオブジェクトですので:への参照を渡すこと

var thecall = function() { 
    alert("hi, this works"); 
}; 

function myfunction(someFunc) { 
    someFunc(); // call the function that was passed 
} 

myfunction(thecall); // pass reference to thecall 

thecall関数にはかっこはありません。つまり、 thecallではなく thecall()と言います。 myfunction(thecall())と言ったらすぐに thecallを呼び出して、 myfunctionに戻します。かっこなしでは thecallへの参照が渡され、 myfunctionから実行されます。

あなたは、各項目は、あなたがこのような何かを行うことができ、特定の関数を呼び出す必要があるメニュー項目のリストについて話しているあなたの場合:

var menuItems = []; 
function addMenuItem(menuText, menuFunction) { 
    menuItems.push({ "menuText" : menuText, "menuFunction" : menuFunction }); 
} 

function test1() { 
    // do something 
} 

addMenuItem("Test 1", test1); 
addMenuItem("Test 2", function() { alert("Menu 2"); }); 

// and to actually call the function associated with a menu item: 
menuItems[1].menuFunction(); 

お知らせ私は追加している2番目のメニュー項目があり無名関数は、パラメータとして渡された時点で、addMenuItem()に定義されています。

(もちろんこれは単純化しすぎ例ですが、私はあなたがそれはあなたの本当の要件のために働くだろうか見ることができると思います。)

6

私はそれをどのように使用できるかを示すために、少し面白くしました。

var thecall = function(name){alert("hi " + name + ", this works");}; 

function myFunction(function_ref) 
{ 
    function_ref('Mark'); 
} 

myFunction(thecall); 
0

私はあなたがeval機能を探していると思います。

var code= 'alert("hi, this works");'; 
eval(code); 
関連する問題