2013-01-06 23 views
13

Come creare una funzione con un nome dinamico? Qualcosa di simile:Javascript: nomi di funzioni dinamiche

function create_function(name){ 
    new Function(name, 'console.log("hello world")'); 
} 
create_function('example'); 
example(); // --> 'hello world' 

Anche la funzione dovrebbe essere un oggetto funzione in modo da poter modificare il prototipo dell'oggetto.

+0

Potrebbe spiegare quale problema si sta tentando di risolvere? – Philipp

+0

@Philipp: Ad esempio, OP potrebbe essere interessato a sostituire un costruttore con un altro, ma dandogli lo stesso nome del costruttore originale, quindi il codice vede lo stesso nome di funzione. Questo potrebbe essere uno dei motivi per cui sto affrontando. Ma sono sicuro che ce ne sono altri. –

risposta

11
window.example = function() { alert('hello world') } 
example(); 

o

name = 'example'; 
window[name] = function() { ... } 
... 

o

window[name] = new Function('alert("hello world")') 
+0

[Aggiungi un violino] (http://jsfiddle.net/mE2n5/) nella tua risposta. –

+9

Non so perché la risposta sbagliata è un rango hign. l'autore ha bisogno di una funzione con nome in fase di esecuzione, non di un nome globale da visitare. –

+0

il post in basso è il modo migliore per fare o questo? –

13

Ho giocato in giro con questo per le ultime 3 ore e alla fine ottenuto almeno un po 'elegante utilizzando le nuove funzioni come suggerito su altri thread:

/** 
* 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'); 

Se si esegue il codice sopra, si dovrebbe vedere il seguente output per la console:

Problemi correlati