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);
}
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);
}
相关文章推荐
- JavaScript中回调函数(CallBack)
- 针对javascript回调函数传参数的简单实例(转自百度知道)
- javascript异步加载脚本并触发回调函数
- JavaScript回调函数
- 理解与使用Javascript中的回调函数
- JavaScript 动态添加脚本,并触发回调函数的实现代码
- Javascript 回调函数
- [JavaScript]类之四---关于回调函数中变量作用域的讨论(精)
- JavaScript回调函数的使用
- javascript 回调函数
- 理解和使用 JavaScript 中的回调函数
- javascript的回调函数
- JavaScript ES7 中使用 async/await 解决回调函数嵌套问题
- 关于javascript中的回调函数
- Javascript 中的回调函数和递归函数简单实际分析学习
- 彻底理解javascript的回调函数(推荐)
- 理解 JavaScript 回调函数并使用
- 理解javascript中的回调函数(callback)
- JavaScript 在回调函数中闭包保存循环index
- javascript AOP 实现,ajax回调函数使用比较方便