2012-06-29 2 views
0

введите код hereI следующий кодJava скрипт изменить функцию во время выполнения

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

Я хочу создать функцию б в

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

Мой подход что-то вроде

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

Это, конечно, не работает. Но мне интересно, есть ли какая-то библиотека, поддерживающая это.

Редактировать: Возможно, мне нужно описать мой сценарий, чтобы его более ясное, чего я хочу достичь.

Я использую библиотеку async.js для обработки нескольких асинхронных вызовов. Мой код выглядит как

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

Очевидно, что существует много повторяющегося кода, который меня беспокоит. Поэтому моя идея - создать функцию asyncCall для выполнения задач шаблона. Идея:

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

Линия с комментарием - это то, о чем я размышляю. Я пытаюсь создать новую функцию, которая объединяет внутренние и внешние обратные вызовы.

ответ

4

Вы можете сделать

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

Вы могли бы написать:

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

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

И пойти немного дальше, вы можете даже написать целую функцию функции Состав:

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

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

(См. Его на работе http://jsfiddle.net/xtofl/Pdrge/)

Смежные вопросы