Por exemplo;
var s = "function test(){
alert(1);
}";
var fnc = aMethod(s);
Se esta for a string, quero uma função chamada fnc. E fnc();
aparece a tela de alerta.
eval("alert(1);")
não resolve meu problema.
javascript
string
function
ymutlu
fonte
fonte
A melhor maneira de criar uma função a partir de uma string é usando
Function
:Isso tem como vantagem / desvantagem que as variáveis no escopo atual (se não globais) não se aplicam à função recém-construída.
Também é possível passar argumentos:
fonte
Function
você não polui o escopo local e é por isso queeval
torna a otimização tão difícil para os engines ... Com o exemplo de OP, eu:var fnc = Function('return '+s)();
element.onclick = function() { alert("test"); }
.Você está bem perto.
Aqui está um violino funcionando .
fonte
eval
Aviso obrigatório para futuros pesquisadores:eval
pode abrir brechas para hackers: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… mas se você conhece seus perigos e pode evitá-los, então esta é uma maneira simples e agradável de criar uma função a partir de uma stringSim, usar
Function
é uma ótima solução, mas podemos ir um pouco além e preparar um analisador universal que analisa a string e a converte em uma função JavaScript real ...exemplos de uso:
aqui está jsfiddle
fonte
Nomes de funções dinâmicas em
JavaScript
Usando
Function
Fonte: http://marcosc.com/2012/03/dynamic-function-names-in-javascript/
Usando
eval
Usando
sjsClass
https://github.com/reduardo7/sjsClass
Exemplo
fonte
Essa técnica pode ser equivalente ao método eval, mas eu queria adicioná-lo, pois pode ser útil para alguns.
Isso é funcionalmente como adicionar este elemento <script> ao final do seu documento, por exemplo:
fonte
Use o
new Function()
com um retorno dentro e execute-o imediatamente.fonte
Um exemplo com argumentos dinâmicos:
fonte