2012-06-29 85 views
0

輸入代碼hereI有以下代碼Java腳本的修改功能

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

我想創建一個函數B作爲

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/