zoukankan      html  css  js  c++  java
  • 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(/functions+([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>



  • 相关阅读:
    用opengl实现多个视口
    齐次坐标和矩阵变换
    关于透明和不透明排序问题
    PlaneBoundedVolumeList平面体积查询
    jQuery获取元素
    关于借助prototype进行分页的一个小插件
    浏览器解析状态
    关于获取元素进行动画效果的问题以及简单的正则表达式验证
    php简单分页类
    生产者消费者问题
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5139132.html
Copyright © 2011-2022 走看看