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

javascript 自己主动绑定JS callback 的方法函数的更多相关文章

  1. cocos2dx 自己主动绑定js

    依照教程把全部资源下载好后....... 找到cocos2dx project下的tools/bindings-generator/test 发现里面有test.sh , test.ini , 去掉s ...

  2. JavaScript模板引擎artTemplate.js——两种方法实现性别的判定

    template.helper(name, callback) name:必传,辅助事件的名称. callback:必传,辅助事件的回调函数. return:undefined 所谓的辅助事件,主要用 ...

  3. JavaScript模板引擎artTemplate.js——template.helper()方法

    上一篇文章我们已经讲到了helper()方法,但是上面的例子只是一个参数的写法,如果是多个参数,写法就另有区别了. <div id="user_info"></d ...

  4. JavaScript模板引擎artTemplate.js——template.compile()方法

    template.compile(source, options) source:必传,渲染模板的内容. options:可选,通常不传.(其实是我还没研究明白) return:一个渲染函数. 示例如 ...

  5. 【深入JavaScript】一种JS的继承方法

    这些天读了John Resig的<Secrets of JavaScript Ninja>,其中讨论到JS中实现继承的方案,非常有趣,自己探索了一下,形成了笔记,放到这里. 这个方案在Re ...

  6. cocos2d-html5 javascript 通过C++绑定,调用java方法

    1.java中的写法 /* * XConnectPlugin.java * * Created on: 2014年4月30日 * Author: lswdonald9@gmail.com */ pac ...

  7. JS调用OC方法并传值,OC调用JS方法并传值////////////////////////zz

     iOS开发-基于原生JS与OC方法互相调用并传值(附HTML代码)     最近项目里面有有个商品活动界面,要与web端传值,将用户在网页点击的商品id 传给客户端,也就是js交互,其实再说明白一点 ...

  8. 转载 -- 基于原生JS与OC方法互相调用并传值(附HTML代码)

    最近项目里面有有个商品活动界面,要与web端传值,将用户在网页点击的商品id 传给客户端,也就是js交互,其实再说明白一点就是方法的互相调用而已. 本文叙述下如何进行原生的JavaScript交互 本 ...

  9. C#中在AxWebBrowser控件注入JS脚本的方法

    /// <summary> /// 窗体加载 /// </summary> private void JS_Load(object sender, EventArgs e) { ...

随机推荐

  1. Android studio多个项目之间怎么实现快速切换?

    Android studio多个项目之间怎么实现快速切换?Android studio中打开的项目太多了,想切换到一个项目很麻烦,怎么才能快速切换到另一个项目中呢?请看下文详细介绍 在对Android ...

  2. oschina iOS代码库

    iOS代码库 34Activity 54下拉刷新(pull-to-refresh) 143菜单 (Menu) 20位置信息(GPS/Location) 24iOS 表单 74提醒 (Notificat ...

  3. 【四】注入框架RoboGuice使用:(Your First System Service Injection)

    上一篇我们简单的介绍了一下RoboGuice的使用([三]注入框架RoboGuice使用:(Your First Resource Injection)),今天我们来看下系统服务的使用注解的方法: 为 ...

  4. 动态规划——最长公共子序列(LCS)

    /** * @brief longest common subsequence(LCS) * @author An * @data 2013.8.26 **/ #include <iostrea ...

  5. PHP - 多文件上传

    <html> <head> <meta charset="utf-8"> <title>index_uploads</titl ...

  6. C中的链接属性及作用域

    如果相同的标识符出现在几个不同的源文件中时,它们是表示相同的实体,还是不同的实体.标识符的链接属性决定如何处理在不同文件中出现的标识符.标识符的作用域与它的链接属性有关. 链接属性一般有三种:exte ...

  7. Python 第七篇:socket编程

    一:socket基础: 1.1:Socket基础: socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用[打开][读写][关闭]模式来操作.socket就是该模 ...

  8. DP HDIJ1421 搬宿舍

    Problem Description 搬寝室是很累的,xhd深有体会.时间追述2006年7月9号,那天xhd迫于无奈要从27号楼搬到3号楼,因为10号要封楼了.看着寝室里的n件物品,xhd开始发呆, ...

  9. Oracle多实例的配置方法

    SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME /dbhome_2) (PROGRAM ...

  10. 设计模式(五)适配器模式Adapter(结构型)

      设计模式(五)适配器模式Adapter(结构型) 1. 概述: 接口的改变,是一个需要程序员们必须(虽然很不情愿)接受和处理的普遍问题.程序提供者们修改他们的代码;系统库被修正;各种程序语言以及相 ...