dinamicas - javascript>: eval
Javascript: nombres de funciones dinĂ¡micas (2)
Esta pregunta ya tiene una respuesta aquí:
- Nombre de la función dinámica en javascript? 15 respuestas
¿Cómo crear una función con un nombre dinámico? Algo como:
function create_function(name){
new Function(name, ''console.log("hello world")'');
}
create_function(''example'');
example(); // --> ''hello world''
Además, la función debe ser un objeto de función para poder modificar el prototipo del objeto.
He estado jugando con esto durante las últimas 3 horas y finalmente lo he conseguido al menos un poco elegante usando la nueva función como se sugiere en otros hilos:
/**
* JavaScript Rename Function
* @author Nate Ferrero
* @license Public Domain
* @date Apr 5th, 2014
*/
var renameFunction = function (name, fn) {
return (new Function("return function (call) { return function " + name +
" () { return call(this, arguments) }; };")())(Function.apply.bind(fn));
};
/**
* Test Code
*/
var cls = renameFunction(''Book'', function (title) {
this.title = title;
});
new cls(''One Flew to Kill a Mockingbird'');
Si ejecuta el código anterior, debería ver el siguiente resultado en su consola:
Book {title: "One Flew to Kill a Mockingbird"}
window.example = function () { alert(''hello world'') }
example();
o
name = ''example'';
window[name] = function () { ... }
...
o
window[name] = new Function(''alert("hello world")'')