Esiste un modo in javascript per ottenere la definizione di una determinata funzione come una stringa, che può essere eventualmente modificata e valutata?

StackOverflow https://stackoverflow.com/questions/1430761

  •  07-07-2019
  •  | 
  •  

Domanda

Sto cercando di valutare una funzione in un nuovo contesto, ovvero uno che contiene una determinata parola definita che non esiste nell'ambito. È abbastanza facile se ho la definizione della funzione come stringa, ma vorrei fornire la possibilità di farlo con un elenco regolare di funzioni, in questo modo:

var funcs = {
  first: function() { return 'yayaya'; },
  second: function() { return 'okokok' + keyword; },
  ...
};

poi più tardi:

function Thing () {};

for (func in funcs) {
  var definition = funcs[func].definition();
  var keyword = "NOW I AM THE KEYWORD";
  var actual_func_with_keyword_defined = eval(definition);
  Thing.prototype[func] = actual_func_with_keyword_defined;
}

Quello che mi manca è la funzione definition () o equivalente, che restituisce l'origine della funzione. Questo è possibile in JavaScript?

È stato utile?

Soluzione

Funzionerà, anche se sono sicuro che esiste una soluzione più lunga ed elegante:

function foo() {
}
var bar = '' + foo; //type cast to a string by adding an empty string
alert(bar);

Altri suggerimenti

Prova semplicemente a eliminare .definition () .

Il modo standard di JS è chiamare toString () sulla funzione. In questo modo:

function myFun() {}

myFun.toString() // gives "function myFun() {}",
                 // potentially with white space differences
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top