eval() è la funzione che devi fare, ma vorrei consigliare provare una di queste cose per ridurre al minimo l'uso di eval. Speriamo che uno di essi abbia senso per te.
Conservare la funzione
Conservare la funzione come una funzione, non come una stringa, e usarlo come una funzione più tardi. La posizione in cui si memorizza la funzione dipende da voi.
var funcForLater = clickedOnItem;
// later is now
funcForLater(t.parentNode.id);
o
someObject.funcForLater = clickedOnItem;
// later is now
(someObject.funcForLater)(t.parentNode.id);
nome funzione Store
Anche se si deve memorizzare il nome della funzione come una stringa, è possibile ridurre la complessità facendo
(eval(settings.functionName))(t.parentNode.id);
che riduce al minimo la quantità di Javascript che devi costruire e valutazione.
Dizionario di gestori
Mettere tutte le funzioni di azione si potrebbe aver bisogno in un oggetto, e li chiamano dizionario-stile utilizzando la stringa.
// 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);
(nota minore:. Se invece qui si è utilizzato la sintassi itemActions[actionName](t.parentNode.id);
la funzione sarebbe chiamato come metodo di itemActions
)
fonte
2009-05-26 20:47:25
Che tipo è 'settings.functionName'? – Gumbo