1. ホーム
  2. ジャバスクリプト

[解決済み] StringをJavaScriptの関数呼び出しにする方法は?[重複している]をクリックします。

2022-04-03 10:39:24

質問

みたいな文字列が出ました。

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

というように、関数呼び出しに変換したいのです。

clickedOnItem(IdofParent);

もちろん、これはJavaScriptで行う必要があります。 でアラートを出すと settings.functionName + '(' + t.parentNode.id + ')'; は、すべて正しく取得するようです。 私はちょうどそれがに翻訳される関数を呼び出す必要があります。

レジェンドです。

settings.functionName = clickedOnItem

t.parentNode.id = IdofParent

解決方法は?

私はevalが大嫌いで、そして、私は 一人ではない :

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

編集する まはんさんのコメントへの返信です。 この特殊なケースで 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);
}