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 相关文章推荐
javascript加号"+"的二义性说明
Mar 04 Javascript
jQuery 2.0.3 源码分析之core(一)整体架构
May 27 Javascript
a标签click和href执行顺序探讨
Jun 23 Javascript
JavaScript函数作用域链分析
Feb 13 Javascript
Vue2.0实现将页面中表格数据导出excel的实例
Aug 09 Javascript
vue-video-player 通过自定义按钮组件实现全屏切换效果【推荐】
Aug 29 Javascript
vue swipe自定义组件实现轮播效果
Jul 03 Javascript
解决layer弹出层msg的文字不显示的问题
Sep 11 Javascript
javascript 原型与原型链的理解及应用实例分析
Feb 10 Javascript
json_decode 索引为数字时自动排序问题解决方法
Mar 28 Javascript
JS实现canvas简单小画板功能
Jun 23 Javascript
js+css实现扇形导航效果
Aug 18 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
把从SQL中取出的数据转化成XMl格式
2006/10/09 PHP
PHP中读取文件的8种方法和代码实例
2014/08/05 PHP
php生成RSS订阅的方法
2015/02/13 PHP
PHP利用Socket获取网站的SSL证书与公钥
2017/06/18 PHP
PHP多个图片压缩成ZIP的方法
2020/08/18 PHP
ie 处理 gif动画 的onload 事件的一个 bug
2007/04/12 Javascript
23个超流行的jQuery相册插件整理分享
2011/04/25 Javascript
关于jquery性能最佳实践的讨论,与求教
2012/03/30 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之主动触发事件和模拟冒泡处理
2015/11/24 Javascript
javascript显示上周、上个月日期的处理方法
2016/02/03 Javascript
JS中Safari浏览器中的Date
2017/07/17 Javascript
react 父子组件之间通讯props
2018/09/08 Javascript
JS简单判断是否在微信浏览器打开的方法示例
2019/01/08 Javascript
详解vue-cli 2.0配置文件(小结)
2019/01/14 Javascript
webpack5 联邦模块介绍详解
2020/07/08 Javascript
javascript实现随机抽奖功能
2020/12/30 Javascript
[04:10]2018年度CS GO玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
Python操作串口的方法
2015/06/17 Python
python3射线法判断点是否在多边形内
2019/06/28 Python
Django 实现图片上传和显示过程详解
2019/07/18 Python
Python发送手机动态验证码代码实例
2020/02/28 Python
一文轻松掌握python语言命名规范规则
2020/06/18 Python
Python with语句用法原理详解
2020/07/03 Python
html5-Canvas可以在web中绘制各种图形
2012/12/26 HTML / CSS
人民教师求职自荐信
2014/03/12 职场文书
施工协议书范本
2014/04/22 职场文书
企业诚信承诺书
2014/05/23 职场文书
物理系毕业生自荐书
2014/06/13 职场文书
班级团队活动方案
2014/08/14 职场文书
民主评议党员自我评价材料
2014/09/18 职场文书
涉及车辆房产分割的离婚协议书范文
2014/10/12 职场文书
努力工作保证书
2015/02/28 职场文书
文员岗位职责范本
2015/04/16 职场文书
资金申请报告范文
2015/05/14 职场文书
女方离婚起诉书
2015/05/18 职场文书
法律讲堂观后感
2015/06/11 职场文书