您的位置:首页 > Web前端 > JavaScript

javascript 回调函数

2013-01-22 22:31 155 查看
有一系列javascript方法需要调用,并且可能对于每个方法都有自己的回调函数,要求顺序执行各函数和自己的回调函数,下面这个方法就是基于这个需求产生的,目前还不太完善,但是足以满足大部分需求了。使用方法:传入Array数组的option参数fun(要调用的函数名),callback(回调函数方法体),timeout(如果没有回调方法可设置延时执行序列中下个方法)。

var CallBackEventHandle = function() {

var options;

if (arguments.length == 0) {

return;

}

options = arguments[0];

if (options.constructor == Array) {

options = options.reverse();

var deep = 1;

var RecursiveFun = function() {

var options;

var funStr = "";

if (arguments.length == 0) {

return;

}

options = arguments[0];

var optionObj = options.pop();

if (optionObj != undefined) {

var fun, callback, timeout;

if ("fun" in optionObj) {

fun = optionObj.fun;

}

if ("callback" in optionObj) {

callback = optionObj.callback;

}

if ("timeout" in optionObj) {

timeout = optionObj.timeout;

}

var symbol = "";

var num=1;

for (var i = 1; i < deep; i++) {

num = num*2;

}

for(var i=1 ;i<num;i++) {

symbol += "\\";

}

symbol += "\"";

deep++;

if (typeof (fun) == "string") {

if (typeof (callback) == "string") {

funStr += fun + "(";

funStr += "{ finishCallBack: " + symbol + callback + RecursiveFun(options) + symbol + " }";

funStr += ");";

}

else if (typeof (callback) == "undefined") {

funStr += fun + "(";

funStr += "{ finishCallBack: " + symbol + RecursiveFun(options, timeout) + symbol + " }";

funStr += ");";

}

if (arguments[1] != undefined && !isNaN(arguments[1])) {

funStr = "var next" + fun + "=function(){setTimeout(function(){" + funStr + "}," + parseInt(arguments[1]) + ")};";

funStr += "next" + fun + "();";

}

}

// var evalfun;

// eval("evalfun=" + fun);

// evalfun(option);

return funStr

}

else {

return "";

}

};

var funstr = RecursiveFun(options);

if (funstr != "")

eval(funstr);

}

};

function fun1(option)

{

alert("fun1");

if(option && "finishCallBack" in option)

{

var finishcall = option.finishCallBack;

if(typeof(finishcall) == "string")

{

eval(finishcall);

}

else

{

finishcall();

}

}

}

function fun2(option)

{

alert("fun2");

if(option && "finishCallBack" in option)

{

var finishcall = option.finishCallBack;

if(typeof(finishcall) == "string")

{

eval(finishcall);

}

else

{

finishcall();

}

}

}

function fun3(option)

{

alert("fun3");

if(option && "finishCallBack" in option)

{

var finishcall = option.finishCallBack;

if(typeof(finishcall) == "string")

{

eval(finishcall);

}

else

{

finishcall();

}

}

}

//依次调用fun1,fun1的callback,fun2,fun2的callback,fun3,fun3的callback

CallBackEventHandle(new Array({fun:"fun1",callback:"alert('a');"},{fun:"fun2",callback:"alert('b');"},{fun:"fun3",callback:"alert('c');"}));

//依次调用fun1,fun1的callback,fun2,(这里没有传入callbak参数,而是设置了timeout,将延迟5秒执行fun3),fun3,fun3的callback

CallBackEventHandle(new Array({fun:"fun1",callback:"alert('a');"},{fun:"fun2",timeout:"5000"},{fun:"fun3",callback:"alert('c');"}));

function w(s)

{

document.write(s);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Js