文字列を JavaScript 関数呼び出しに変換するにはどうすればいいですか? [重複] 質問する

文字列を JavaScript 関数呼び出しに変換するにはどうすればいいですか? [重複] 質問する

次のような文字列を取得しました:

settings.functionName + '(' + t.parentNode.id + ')';

これを次のような関数呼び出しに変換します。

clickedOnItem(IdofParent);

もちろん、これは JavaScript で行う必要があります。アラートを実行すると、settings.functionName + '(' + t.parentNode.id + ')';すべてが正しく処理されるようです。変換される関数を呼び出すだけです。

伝説:

settings.functionName = clickedOnItem

t.parentNode.id = IdofParent

ベストアンサー1

私は eval が嫌いですが、私だけではありません

var fn = window[settings.functionName];
if(typeof fn === 'function') {
    fn(t.parentNode.id);
}

編集: @Mahan のコメントへの返信: この場合、settings.functionNameは になります"clickedOnItem"。これは実行時に に変換されvar fn = window[settings.functionName];var fn = window["clickedOnItem"]への参照を取得しますfunction clickedOnItem (nodeId) {}。変数内の関数への参照を取得したら、「変数の呼び出し」によってこの関数を呼び出すことができます。つまり、fn(t.parentNode.id)は に等しくclickedOnItem(t.parentNode.id)、これが OP が求めていたものです。

より詳しい例:

/* Somewhere: */
window.settings = {
  /* [..] Other settings */
  functionName: 'clickedOnItem'
  /* , [..] More settings */
};

/* Later */
function clickedOnItem (nodeId) {
  /* Some cool event handling code here */
}

/* Even later */
var fn = window[settings.functionName]; 
/* note that settings.functionName could also be written
   as window.settings.functionName. In this case, we use the fact that window
   is the implied scope of global variables. */
if(typeof fn === 'function') {
    fn(t.parentNode.id);
}

おすすめ記事