dess中一个简单的多路委托的实现


Posted in Javascript onJuly 20, 2010
var SDelegate = function(f, b, c) { 
if (b) { 
this.asFunction_ = function() { 
return f.apply(b, arguments); 
} 
} else { 
this.asFunction_ = function() { 
return f.apply(this, arguments); 
} 
} 
this.method_ = f; 
this.binding_ = b; 
this.continus = c; 
} 
SDelegate.composite = function(d) { 
if (d.continus) { 
var con = d.continus.composited_ = SDelegate.composite(d.continus); 
var method = d.asFunction_; 
return function() { 
con.apply(this, arguments); 
return method.apply(this, arguments); 
} 
} else { 
return d.asFunction_; 
} 
} 
SDelegate.prototype.call = function() { 
if (!this.composited_) this.composited_ = SDelegate.composite(this); 
return this.composited_.apply(arguments[0], Array.prototype.slice.call(arguments, 1)); 
} 
SDelegate.prototype.remove = function() { 
var removeP = function(parent, item, test, data) { 
if (!item) return; 
parent.composited_ = item.composited_ = null; 
if (test(item, data)) { 
parent.continus = item.continus; 
removeP(parent, item.continus, test, data); 
} else { 
removeP(item, item.continus, test, data); 
} 
}; 
return function(test, data) { 
var p = this; 
if (test(this, data)) { 
p = this.continus; 
} 
removeP(p, p.continus, test, data); 
p.composited_ = null; 
return p; 
} 
}(); 
SDelegate.prototype.append = function(f, b) { 
return new SDelegate(f, b, this); 
}

这个SDelegate用起来可能会比较诡异,比如很多操作都要重新赋值。Dess中,SDelegate主要用于一些特定场合,如DOM事件派发。
Javascript 相关文章推荐
一端时间轮换的广告
Jun 26 Javascript
JavaScript 判断判断某个对象是Object还是一个Array
Jan 28 Javascript
js控制不同的时间段显示不同的css样式的实例代码
Nov 04 Javascript
jquery如何把数组变为字符串传到服务端并处理
Apr 30 Javascript
简介alert()与console.log()的不同
Aug 26 Javascript
JS实现3D图片旋转展示效果代码
Sep 22 Javascript
javascript返回顶部的按钮实现方法
Jan 09 Javascript
浅谈js之字面量、对象字面量的访问、关键字in的用法
Nov 20 Javascript
bootstrap响应式表格实例详解
May 15 Javascript
JavaScript制作3D旋转相册
Aug 02 Javascript
JavaScript缺少insertAfter解决方案
Jul 03 Javascript
React+EggJs实现断点续传的示例代码
Jul 07 Javascript
js 返回时间戳所对应的具体时间
Jul 20 #Javascript
javascript 数据类型转换(parseInt,parseFloat)
Jul 20 #Javascript
轻量级 JS ToolTip提示效果
Jul 20 #Javascript
javascript动画之圆形运动,环绕鼠标运动作小球
Jul 20 #Javascript
根据出生日期自动取得星座的js代码
Jul 20 #Javascript
firefox火狐浏览器与与ie兼容的2个问题总结
Jul 20 #Javascript
Javascript实现CheckBox的全选与取消全选的代码
Jul 20 #Javascript
You might like
PHP合并静态文件详解
2014/11/14 PHP
简要剖析PHP的Yii框架的组件化机制的基本知识
2016/03/17 PHP
php 的反射详解及示例代码
2016/08/25 PHP
php实现统计二进制中1的个数算法示例
2018/01/23 PHP
thinkphp5.0整合phpsocketio完整攻略(绕坑)
2018/10/12 PHP
PHP进阶学习之类的自动加载机制原理分析
2019/06/18 PHP
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
2019/10/21 PHP
JavaScript入门教程(10) 认识其他对象
2009/01/31 Javascript
Javascript实现的鼠标经过时播放声音
2010/05/18 Javascript
将文本输入框内容加入表中的js代码
2013/08/18 Javascript
用json方式实现在 js 中建立一个map
2014/05/02 Javascript
浅谈JavaScript中的对象及Promise对象的实现
2015/11/15 Javascript
javascript经典特效分享 手风琴、轮播图、图片滑动
2016/09/14 Javascript
AngularJS自定义指令详解(有分页插件代码)
2017/06/12 Javascript
underscore之Chaining_动力节点Java学院整理
2017/07/10 Javascript
vuejs 单文件组件.vue 文件的使用
2017/07/28 Javascript
vue动态路由实现多级嵌套面包屑的思路与方法
2017/08/16 Javascript
vuejs实现递归树型菜单组件
2018/01/13 Javascript
JS实现对json对象排序并删除id相同项功能示例
2018/04/18 Javascript
原生JS实现轮播图效果
2018/10/12 Javascript
JavaScript 处理树数据结构的方法示例
2019/06/16 Javascript
Python中实现从目录中过滤出指定文件类型的文件
2015/02/02 Python
Python绑定方法与非绑定方法详解
2017/08/18 Python
详解Python3之数据指纹MD5校验与对比
2019/06/11 Python
pandas的to_datetime时间转换使用及学习心得
2019/08/11 Python
python实现两个一维列表合并成一个二维列表
2019/12/02 Python
pytorch数据预处理错误的解决
2020/02/20 Python
keras中的backend.clip用法
2020/05/22 Python
Pytorch转onnx、torchscript方式
2020/05/25 Python
详解Python中第三方库Faker
2020/09/25 Python
Python Charles抓包配置实现流程图解
2020/09/29 Python
意大利会呼吸的鞋:Geox健乐士
2017/02/12 全球购物
英国网上超市:Ocado
2020/03/05 全球购物
购房委托书范本
2014/09/18 职场文书
2015年社会治安综合治理工作总结
2015/04/10 职场文书
单位车辆管理制度
2015/08/05 职场文书