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 相关文章推荐
点击广告后才能获得下载地址
Oct 26 Javascript
JQuery打造PHP的AJAX表单提交实例
Nov 03 Javascript
js网页侧边随页面滚动广告效果实现
Apr 14 Javascript
jquery.Jwin.js 基于jquery的弹出层插件代码
May 23 Javascript
Node.js实现JS文件合并小工具
Feb 02 Javascript
js实现String.Fomat的实例代码
Sep 02 Javascript
babel基本使用详解
Feb 17 Javascript
vue中七牛插件使用的实例代码
Jul 28 Javascript
详解基于 axios 的 Vue 项目 http 请求优化
Sep 04 Javascript
百度小程序之间的页面通信过程详解
Jul 18 Javascript
关于layui 下拉列表的change事件详解
Sep 20 Javascript
angular中的post请求处理示例详解
Jun 30 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 date与gmdate的获取日期的区别
2010/02/08 PHP
解析PHP跳出循环的方法以及continue、break、exit的区别介绍
2013/07/01 PHP
PHP加密解密字符串汇总
2015/04/26 PHP
thinkphp jquery实现图片上传和预览效果
2020/07/22 PHP
Laravel框架生命周期与原理分析
2018/06/12 PHP
php 后端实现JWT认证方法示例
2018/09/04 PHP
Laravel中10个有用的用法小结
2019/05/06 PHP
ExtJs 表单提交登陆实现代码
2010/08/19 Javascript
js将json格式内容转换成对象的方法
2013/11/01 Javascript
JavaScript中判断对象类型的几种方法总结
2013/11/11 Javascript
整理Javascript数组学习笔记
2015/11/29 Javascript
基于JavaScript实现回到页面顶部动画代码
2016/05/24 Javascript
JS实现表单验证功能(验证手机号是否存在,验证码倒计时)
2016/10/11 Javascript
vue.js实现仿原生ios时间选择组件实例代码
2016/12/21 Javascript
纯js实现html转pdf的简单实例(推荐)
2017/02/16 Javascript
jquery.uploadView 实现图片预览上传功能
2017/08/10 jQuery
mui 打开新窗口的方式总结及注意事项
2017/08/20 Javascript
微信小程序实现表单校验功能
2020/03/30 Javascript
详解Angular路由之路由守卫
2018/05/10 Javascript
在Vue项目中使用snapshot测试的具体使用
2019/04/16 Javascript
python的文件操作方法汇总
2017/11/10 Python
python Pandas 读取txt表格的实例
2018/04/29 Python
python实现简单登陆系统
2018/10/18 Python
python 读写excel文件操作示例【附源码下载】
2019/06/19 Python
详解Python文件修改的两种方式
2019/08/22 Python
Matplotlib 绘制饼图解决文字重叠的方法
2020/07/24 Python
python中random.randint和random.randrange的区别详解
2020/09/20 Python
有原因的手表:Flex Watches
2019/03/23 全球购物
英国DIY汽车维修配件网站:DIY Car Service Parts
2019/08/30 全球购物
澳大利亚最好的电动自行车:Leon Cycle
2020/12/19 全球购物
匿名检举信范文
2015/03/02 职场文书
余世维讲座观后感
2015/06/11 职场文书
休假证明书
2015/06/24 职场文书
2019个人工作计划书的格式及范文!
2019/07/04 职场文书
告诉你一个秘密:富人致富的五大优点
2019/07/11 职场文书
总结一些Java常用的加密算法
2021/06/11 Java/Android