Java script modifica la función en tiempo de ejecución

ingrese el código aquíTengo el siguiente código

function a(){alert("a");}

Quiero crear una función b como

function b(){alert("a"); alert("b");}

Mi enfoque es algo así como

var b = a + alert("b");

Por supuesto, esto no funciona. Pero me pregunto si hay algún tipo de biblioteca que respalde esto.

Editar: Tal vez necesito describir mi escenario para que quede más claro lo que quiero lograr.

Estoy usando la biblioteca async.js para manejar múltiples llamadas asíncronas. mi código parece

var values = {};
...
function all() {
    var allDfd = $.Deferred();
    async.parallel(
            [function (callback) {
                remoteCall(function (result) {
                    values.v1 = result;
                    callback(null, 'one');
                });
            },
            function (callback) {
                remoteCall(function (result) {
                    values.v2 = result;
                    callback(null, "two");
                });
            },
            function (callback) {

                remoteCall(function (result) {

                    values.v3 = result;
                    callback(null, "three");
                });
            }], function (err, results) {
                allDfd.resolve();
            });
    return allDfd.promise();
}

Claramente hay muchos códigos repetitivos que me molestan. Así que mi idea es crear una función asyncCall para realizar las tareas repetitivas. la idea es

   var values = {};
...
function all() {
    var allDfd = $.Deferred();
    function getAsyncCall (func, innerCallback, callback) {
        return function asyncCall(func, innnerCallback, callback){
            func(innerCallback + callback(null));  // combine innerCallBack and callback code
        }
    }

    async.parallel(
            [getAsyncCall(remoteCall, function(result){values.v1=result;},callback),
             getAsyncCall(remoteCall, function(result){values.v2=result;},callback),
             getAsyncCall(remoteCall, function(result){values.v3=result;},callback),
            ], function (err, results) {
                allDfd.resolve();
            });
    return allDfd.promise();
}

La línea con el comentario es lo que estoy reflexionando. Estoy tratando de crear una nueva función que combine devoluciones de llamada internas y externas.

preguntado el 29 de junio de 12 a las 19:06

2 Respuestas

Tu puedes hacer

var b = function() { a(); alert('b'); }

Respondido el 29 de junio de 12 a las 19:06

Podrías escribir:

var a=function(){alert("a");}

var b=function(){a(); alert("b");}

Y para ir un poco más allá, incluso puedes escribir una función completa de composición de funciones:

function compose( functions ) {
   return function(){ 
      for(var i=0; i!=functions.length; ++i) {
        functions[i]();
      }
   };
}

var c=compose( [a, function(){ alert("b"); }] );

(Véalo en el trabajo en http://jsfiddle.net/xtofl/Pdrge/)

Respondido el 29 de junio de 12 a las 19:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.