文字列で関数を実行する

Pocket

JavaScriptで関数名を文字列で与えるとその関数が実行されるような方法を考えます。
次のような例で考えます。

  • 「orange」ならば「ミカン」と表示する関数を実行。
  • 「apple」ならば「リンゴ」と表示する関数を実行。

ifで振り分ける

オーソドックスにifで処理を振り分ける方法です。
一つずつif節を書くので、関数が増えると長くなってしまいます。

var word="apple";
function orange(){
  alert("ミカン");
}
function apple(){
  alert("リンゴ");
}
if(word=="orange"){
  orange();
}else if(word=="apple"){
  apple();
}

evalを使う

evalを使うと文字列があたかもコードを書いたかのように振る舞います。
これならば「eval(関数名+"()")」とするだけで実行されます。
振り分ける必要がないので関数が増えてもコードが長くなりません。
また、既存の関数を書き換える必要がありません。

var word="apple";
function orange(){
  alert("ミカン");
}
function apple(){
  alert("リンゴ");
}
eval(word+"()");

オブジェクトとして使う

JavaScriptの指南本にはよく「evalを使うな」と書かれています。見通しが悪くなってデバッグしにくくなるからでしょう。
関数を配列(オブジェクト)のようにして作り、文字列を与えて実行する方法です。
これも関数が増えてもコードが長くなりません。
ただし、既存の関数が「function 関数名()」という形式で書かれている場合は、書き直す必要があります。

var word="apple";
var func_obj=[];
func_obj.orange=function(){
  alert("ミカン");
}
func_obj.apple=function(){
  alert("リンゴ");
}
func_obj[word]();

[ 2012年9月19日 | カテゴリー: JavaScript | タグ: , ]

« | »

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報