运行时的 Java 脚本修改函数

Java script modify function at run time

本文关键字:修改 函数 脚本 Java 运行时      更新时间:2023-09-26

在这里输入代码我有以下代码

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

我想创建一个函数 b 作为

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

我的方法类似于

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

这当然是行不通的。但我想知道是否有某种库支持这一点。

编辑:也许我需要描述我的场景,以便更清楚地了解我想要实现的目标。

我正在使用异步.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();
}

评论的行是我在思考的。我正在尝试创建一个结合内部和外部回调的新函数。

你可以做

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

这样写:

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/的工作中看到它)