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

相关文章
|
1天前
|
JavaScript 前端开发
在JavaScript中实现模块化开发有多种方法
JavaScript模块化开发可通过CommonJS、AMD和ES6模块实现。CommonJS适用于服务器端,使用`require`和`module.exports`处理模块;AMD(如RequireJS)用于浏览器端,依赖`require`和`define`;ES6模块提供原生支持,使用`import`和`export`。选择方式需考虑项目环境、复杂度和技术栈。
9 4
|
2天前
|
JavaScript 前端开发
JS tostring()和join()方法
JS tostring()和join()方法
7 1
|
2天前
|
存储 JavaScript 前端开发
深入了解JavaScript中的indexOf()方法:实现数组元素的搜索和索引获取
深入了解JavaScript中的indexOf()方法:实现数组元素的搜索和索引获取
6 0
|
2天前
|
前端开发 JavaScript 数据处理
在JavaScript中,异步函数是指什么
【5月更文挑战第9天】JavaScript中的异步函数用于处理非立即完成的操作,如定时器、网络请求等。它们可通过回调函数、Promise或async/await来实现。示例展示了如何使用async/await模拟网络请求:定义异步函数fetchData返回Promise,在另一异步函数processData中使用await等待结果并处理。当fetchData的Promise解析时,data变量接收结果并继续执行后续代码。注意,调用异步函数不会阻塞执行,而是会在适当时间点继续。
8 0
|
2天前
|
自然语言处理 JavaScript 前端开发
在JavaScript中,this关键字的行为可能会因函数的调用方式而异
【5月更文挑战第9天】JavaScript中的`this`关键字行为取决于函数调用方式。在非严格模式下,直接调用函数时`this`指全局对象,严格模式下为`undefined`。作为对象方法调用时,`this`指向该对象。用`new`调用构造函数时,`this`指向新实例。通过`call`、`apply`、`bind`可手动设置`this`值。在回调和事件处理中,`this`可能不直观,箭头函数和绑定方法可帮助管理`this`的行为。
8 1
|
2天前
|
JavaScript 前端开发 网络架构
JavaScript中的箭头函数是一种新的函数表达形式
【5月更文挑战第9天】JavaScript的箭头函数以简洁语法简化函数定义,其特性包括:1) 不绑定自身this,继承上下文的this,适合回调和事件处理;2) 没有arguments对象,需用剩余参数语法访问参数;3) 不能用作构造函数,无new调用;4) 没有prototype属性,不支持基于原型的继承。箭头函数在特定场景下优化了this处理,但使用时要注意与普通函数的差异。
6 2
|
3天前
|
JavaScript 前端开发 索引
js添加、删除、替换、插入元素的方法
js添加、删除、替换、插入元素的方法
10 0
|
4天前
|
JavaScript 前端开发
JavaScript 循环方法详解
JavaScript 循环方法详解
17 1
|
4天前
|
JavaScript 前端开发
JavaScript数字方法详解
JavaScript数字方法详解
16 0
|
4天前
|
存储 JavaScript 前端开发
JavaScript对象方法详解
JavaScript对象方法详解
13 1