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 相关文章推荐
网络图片延迟加载实现代码 超越jquery控件
Mar 27 Javascript
一个简单的Node.js异步操作管理器分享
Apr 29 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形菜单
Nov 30 Javascript
如何使用PHP+jQuery+MySQL实现异步加载ECharts地图数据(附源码下载)
Feb 23 Javascript
javascript原型继承工作原理和实例详解
Apr 07 Javascript
JS组件Bootstrap dropdown组件扩展hover事件
Apr 17 Javascript
HTML5+jQuery插件Quicksand实现超酷的星际争霸2兵种分类展示效果(附demo源码下载)
May 25 Javascript
修改 bootstrap table 默认detailRow样式的实例代码
Jul 21 Javascript
vueJs实现DOM加载完之后自动下拉到底部的实例代码
Aug 31 Javascript
cdn模式下vue的基本用法详解
Oct 07 Javascript
vue resource发送请求的几种方式
Sep 30 Javascript
js实现鼠标点击飘爱心效果
Aug 19 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
PHP4实际应用经验篇(7)
2006/10/09 PHP
Yii控制器中filter过滤器用法分析
2016/07/15 PHP
phpcms中的评论样式修改方法
2016/10/21 PHP
php抛出异常与捕捉特定类型的异常详解
2016/10/26 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
Yii框架数据库查询、增加、删除操作示例
2019/10/14 PHP
javascript引用对象的方法
2007/01/11 Javascript
在IE中调用javascript打开Excel的代码(downmoon原作)
2007/04/02 Javascript
基于jquery的一行代码轻松实现拖动效果
2010/12/28 Javascript
js中将URL中的参数提取出来作为对象的实现代码
2011/08/16 Javascript
NodeJS 模块开发及发布详解分享
2012/03/07 NodeJs
不定义JQuery插件 不要说会JQuery
2016/03/07 Javascript
针对BootStrap中tabs控件的美化和完善(推荐)
2016/07/06 Javascript
Select2.js下拉框使用小结
2016/10/24 Javascript
js移动端图片压缩上传功能
2020/08/18 Javascript
Vue2.0生命周期的理解
2018/08/20 Javascript
JavaScript数据结构与算法之基本排序算法定义与效率比较【冒泡、选择、插入排序】
2019/02/21 Javascript
基于js实现逐步显示文字输出代码实例
2020/04/02 Javascript
python 不关闭控制台的实现方法
2011/10/23 Python
Python通过命令开启http.server服务器的方法
2017/11/04 Python
Python爬虫框架Scrapy实例代码
2018/03/04 Python
Python快速查找list中相同部分的方法
2018/06/27 Python
Python OpenCV处理图像之滤镜和图像运算
2018/07/10 Python
python 3.7.0 安装配置方法图文教程
2018/08/27 Python
Python 使用类写装饰器的小技巧
2018/09/30 Python
Python requests模块实例用法
2019/02/11 Python
python列表,字典,元组简单用法示例
2019/07/11 Python
解决Django中调用keras的模型出现的问题
2019/08/07 Python
django框架创建应用操作示例
2019/09/26 Python
python设置中文界面实例方法
2020/10/27 Python
中专生的个人自我评价
2013/12/11 职场文书
模具专业毕业推荐信
2014/03/08 职场文书
科学发展观标语
2014/10/08 职场文书
2015年毕业生实习评语
2015/03/25 职场文书
导游词之桂林
2019/08/20 职场文书
Linux安装Nginx步骤详解
2021/03/31 Servers