¿Hay alguna manera en javascript para obtener la definición de una función dada como una cadena, para ser posiblemente modificada y evadida?

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

  •  07-07-2019
  •  | 
  •  

Pregunta

Estoy tratando de evaluar una función en un nuevo contexto, es decir, una que contiene una determinada palabra definida que no existe en el ámbito. Es bastante fácil si tengo la definición de la función como una cadena, pero me gustaría proporcionar la posibilidad de hacer esto con una lista regular de funciones, así:

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

luego más tarde:

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;
}

Lo que me falta es la función de definición () o equivalente, que devuelve el origen de la función. ¿Es esto posible en javascript?

¿Fue útil?

Solución

Esto funcionará, aunque estoy seguro de que hay una solución más larga y elegante:

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

Otros consejos

Pruebe simplemente sacando el .definition () .

La forma estándar de JS es llamar a toString () en la función. Me gusta así:

function myFun() {}

myFun.toString() // gives "function myFun() {}",
                 // potentially with white space differences
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top