我得到了一个字符串:
settings.functionName + '(' + t.parentNode.id + ')';
我想翻译成一个函数调用,像这样:
clickedOnItem(IdofParent);
当然,这必须用JavaScript来完成。当我在设置上做警报时。functionName + '(' + t.parentNode.id + ')';似乎每件事都是正确的。我只需要调用它转换成的函数。
传说:
settings.functionName = clickedOnItem
t.parentNode.id = IdofParent
eval()是你需要这样做的函数,但我建议尝试其中一种方法来尽量减少eval的使用。希望其中一个对你有意义。
存储函数
将函数存储为函数,而不是字符串,然后将其作为函数使用。在哪里存储函数取决于你自己。
var funcForLater = clickedOnItem;
// later is now
funcForLater(t.parentNode.id);
or
someObject.funcForLater = clickedOnItem;
// later is now
(someObject.funcForLater)(t.parentNode.id);
存储函数名称
即使必须将函数名存储为字符串,也可以通过执行以下操作来降低复杂性
(eval(settings.functionName))(t.parentNode.id);
这将最大限度地减少你必须构造和计算的Javascript的数量。
处理程序字典
将您可能需要的所有操作函数放入一个对象中,并使用字符串以字典方式调用它们。
// global
itemActions = { click: clickedOnItem, rightClick: rightClickedOnItem /* etc */ };
// Later...
var actionName = "click"; // Or wherever you got the action name
var actionToDo = itemActions[actionName];
actionToDo(t.parentNode.id);
(次要注意:如果在这里您使用语法itemActions[actionName](t.parentNode.id);那么该函数将作为itemActions的方法被调用。)