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,如需转载请自行联系原作者

相关文章
|
29天前
|
JavaScript 前端开发 程序员
前端原生Js批量修改页面元素属性的2个方法
原生 Js 的 getElementsByClassName 和 querySelectorAll 都能获取批量的页面元素,但是它们之间有些细微的差别,稍不注意,就很容易弄错!
|
27天前
|
监控 JavaScript Java
Node.js中内存泄漏的检测方法
检测内存泄漏需要综合运用多种方法,并结合实际的应用场景和代码特点进行分析。及时发现和解决内存泄漏问题,可以提高应用的稳定性和性能,避免潜在的风险和故障。同时,不断学习和掌握内存管理的知识,也是有效预防内存泄漏的重要途径。
122 52
|
26天前
|
JavaScript 前端开发 Java
springboot解决js前端跨域问题,javascript跨域问题解决
本文介绍了如何在Spring Boot项目中编写Filter过滤器以处理跨域问题,并通过一个示例展示了使用JavaScript进行跨域请求的方法。首先,在Spring Boot应用中添加一个实现了`Filter`接口的类,设置响应头允许所有来源的跨域请求。接着,通过一个简单的HTML页面和jQuery发送AJAX请求到指定URL,验证跨域请求是否成功。文中还提供了请求成功的响应数据样例及请求效果截图。
springboot解决js前端跨域问题,javascript跨域问题解决
|
29天前
|
JavaScript 前端开发
Moment.js与其他处理时间戳格式差异的JavaScript库相比有什么优势?
Moment.js与其他处理时间戳格式差异的JavaScript库相比有什么优势?
|
29天前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
41 5
|
1月前
|
JavaScript 前端开发
js中的bind,call,apply方法的区别以及用法
JavaScript中,`bind`、`call`和`apply`均可改变函数的`this`指向并传递参数。其中,`bind`返回一个新函数,不立即执行;`call`和`apply`则立即执行,且`apply`的参数以数组形式传递。三者在改变`this`指向及传参上功能相似,但在执行时机和参数传递方式上有所区别。
26 1
|
1月前
|
JavaScript 前端开发
.js方法参数argument
【10月更文挑战第26天】`arguments` 对象为JavaScript函数提供了一种灵活处理参数的方式,能够满足各种不同的参数传递和处理需求,在实际开发中具有广泛的应用价值。
41 7
|
1月前
|
前端开发 JavaScript 开发者
除了 Generator 函数,还有哪些 JavaScript 异步编程解决方案?
【10月更文挑战第30天】开发者可以根据具体的项目情况选择合适的方式来处理异步操作,以实现高效、可读和易于维护的代码。
|
29天前
|
JSON JavaScript 前端开发
使用JavaScript和Node.js构建简单的RESTful API
使用JavaScript和Node.js构建简单的RESTful API
|
JavaScript 前端开发 数据安全/隐私保护