javascript 回调函数

来源:互联网 发布:ie浏览器不能上淘宝网 编辑:程序博客网 时间:2024/05/16 19:24
有一系列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);
}
原创粉丝点击