javascript 自己主动绑定JS callback 的方法函数

时间:2021-02-21 14:47:20

自己写的一个javascript 智能绑定callback 而且调用运行的函数。主要用于异步请求的 ajax中:

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body> <script>
/**
* @author default7@zbphp.com
* @date 2014-10-17
* @description 通过传入的參数获取出函数名称
* @param args
* @returns {string}
*/
function getFunctionName(args) {
var fName = '';
if (typeof args == 'string' && /^[a-zA-Z0-9]+$/.test(args)) {
fName = args;
} else {
var fBody = '';
if (typeof args == 'object' && args.callee) {
fBody = args.callee.toString();
} else if (typeof args == 'string') {
fBody = args;
} if (fBody) {
var m = fBody.match(/function\s+([a-zA-Z0-9]+)\s*\(/i);
if (m && m[1]) {
fName = m[1];
}
}
}
return fName;
} var gCallback = [];
function addCallback(fName, callback) {
if (typeof fName == 'string' && typeof window[fName] == 'function' && typeof callback == 'function') {
if (typeof gCallback[fName] == 'undefined') {
gCallback[fName] = [];
}
gCallback[fName].push(callback);
}
} /**
* @description 运行绑定的函数
* @param args
*/
function execCallback(args) {
var fName = getFunctionName(args);
if (fName && window[fName] && gCallback[fName]) {
for (var i in gCallback[fName]) {
gCallback[fName][i]();
}
gCallback[fName] = [];//仅仅调用一次
}
}
</script> <script>
function a() {
alert('a');
} function b() {
alert('b');
} function c() {
alert('c');
}
function d() {
alert('d');
} function initUser() {
execCallback(arguments); } addCallback('initUser', a);
addCallback('initUser', b);
addCallback('initUser', c); initUser();
addCallback('initUser', d);
initUser(); </script>
</body>
</html>