我得到了一个字符串:

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

我想翻译成一个函数调用,像这样:

clickedOnItem(IdofParent);

当然,这必须用JavaScript来完成。当我在设置上做警报时。functionName + '(' + t.parentNode.id + ')';似乎每件事都是正确的。我只需要调用它转换成的函数。

传说:

settings.functionName = clickedOnItem

t.parentNode.id = IdofParent

当前回答

根据Nicolas Gauthier的回答:

var strng = 'someobj.someCallback';
var data = 'someData';

var func = window;
var funcSplit = strng.split('.');
for(i = 0;i < funcSplit.length;i++){
   //We maybe can check typeof and break the bucle if typeof != function
   func = func[funcSplit[i]];
}
func(data);

其他回答

我希望能够将函数名作为字符串,调用它,并将参数传递给函数。我无法得到这个问题的选择答案,但这个答案准确地解释了它,这里有一个简短的演示。

function test_function(argument)    {
    alert('This function ' + argument); 
}

functionName = 'test_function';

window[functionName]('works!');

这也适用于多个参数。

window[settings.functionName](t.parentNode.id);

不需要eval()

如果设置。functionName已经是一个函数了,你可以这样做:

settings.functionName(t.parentNode.id);

否则,这也应该工作,如果设置。functionName只是函数名:

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

我更喜欢使用这样的方法:

window.callbackClass['newFunctionName'] = function(data) { console.log(data) };
...
window.callbackClass['newFunctionName'](data);

根据Nicolas Gauthier的回答:

var strng = 'someobj.someCallback';
var data = 'someData';

var func = window;
var funcSplit = strng.split('.');
for(i = 0;i < funcSplit.length;i++){
   //We maybe can check typeof and break the bucle if typeof != function
   func = func[funcSplit[i]];
}
func(data);