次のような文字列を取得しました:
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);
}