Ci sono alcune cose che sono impossibili da fare in JS senza una funzione simile a eval (   eval   ,   Function   , e forse più). 
 Prendi   apply    per esempio. È facile da usare quando lo si utilizza su normali chiamate di funzione: 
   foo.apply(null, [a, b, c])    
 Ma come faresti questo per gli oggetti che stai creando tramite la nuova sintassi? 
   new Foo.apply(null, [a, b, c])    non funziona, né forma simile. 
 Ma puoi aggirare questa limitazione tramite   eval    o   Function    (io uso   Function    in questo esempio): 
Function.prototype.New = (function () {
    var fs = [];
    return function () {
        var f = fs[arguments.length];
        if (f) {
            return f.apply(this, arguments);
        }
        var argStrs = [];
        for (var i = 0; i < arguments.length; ++i) {
            argStrs.push("a[" + i + "]");
        }
        f = new Function("var a=arguments;return new this(" + argStrs.join() + ");");
        if (arguments.length < 100) {
            fs[arguments.length] = f;
        }
        return f.apply(this, arguments);
    };
}) ();
 Esempio: 
   Foo.New.apply(null, [a, b, c])   ; 
 Ovviamente, potresti costruire manualmente le funzioni che   Function.prototype.New    usa, ma non solo è verboso e goffo, ma (per definizione) deve essere finito.    Function    consente al codice di funzionare per qualsiasi numero di argomenti.