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

简介:

自己写的一个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>







本文转自mfrbuaa博客园博客,原文链接http://www.cnblogs.com/mfrbuaa/p/5139132.html,如需转载请自行联系原作者

相关文章
|
2月前
|
JavaScript 前端开发 开发者
JavaScript中的箭头函数:简洁的语法与this绑定
JavaScript中的箭头函数:简洁的语法与this绑定
310 184
|
5月前
|
监控 负载均衡 JavaScript
有哪些有效的方法可以优化Node.js应用的性能?
有哪些有效的方法可以优化Node.js应用的性能?
295 69
|
4月前
|
JavaScript Linux 内存技术
Debian 11系统下Node.js版本更新方法详解
本指南详细介绍在Linux系统中安装和管理Node.js的步骤。首先检查现有环境,包括查看当前版本和清除旧版本;接着通过NodeSource仓库安装最新版Node.js并验证安装结果。推荐使用nvm(Node Version Manager)进行多版本管理,便于切换和设置默认版本。同时,提供常见问题解决方法,如权限错误处理和全局模块迁移方案,以及版本回滚操作,确保用户能够灵活应对不同需求。
290 0
|
2月前
|
前端开发 JavaScript
JavaScript中的箭头函数:简洁与this绑定
JavaScript中的箭头函数:简洁与this绑定
|
4月前
|
JavaScript Linux 内存技术
Debian 11系统下Node.js版本更新方法
Debian 11更新Node.js主要就是这三种方式,无论你是初涉其中的新手还是找寻挑战的专家,总有一种方式能满足你的需求。现在,你已经是这个
320 80
|
5月前
|
资源调度 JavaScript 前端开发
Day.js极简轻易快速2kB的JavaScript库-替代Moment.js
dayjs是一个极简快速2kB的JavaScript库,可以为浏览器处理解析、验证、操作和显示日期和时间,它的设计目标是提供一个简单、快速且功能强大的日期处理工具,同时保持极小的体积(仅 2KB 左右)。
258 24
|
6月前
|
JavaScript 前端开发 Java
js 垃圾回收机制的方法
JS回收机制方法讲解
|
自然语言处理 JavaScript 前端开发
学习javaScript必知必会(2)~js词法分析、介绍一下主流的浏览器的开发者工具(js调试和查看网络请求)
学习javaScript必知必会(2)~js词法分析、介绍一下主流的浏览器的开发者工具(js调试和查看网络请求)
192 0
学习javaScript必知必会(2)~js词法分析、介绍一下主流的浏览器的开发者工具(js调试和查看网络请求)

热门文章

最新文章