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 相关文章推荐
js 禁用浏览器的后退功能的简单方法
Dec 10 Javascript
使用jquery写个更改表格行顺序的小功能
Apr 29 Javascript
基于jQuery实现二级下拉菜单效果
Feb 01 Javascript
React.js入门实例教程之创建hello world 的5种方式
May 11 Javascript
javascript设计模式Constructor(构造器)模式
Aug 19 Javascript
JS简单实现仿百度控制台输出信息效果
Sep 04 Javascript
使用bootstrap实现多窗口和拖动效果
Sep 22 Javascript
详解vue过滤器在v2.0版本用法
Jun 01 Javascript
聊聊Vue.js的template编译的问题
Oct 09 Javascript
浅谈Vue组件及组件的注册方法
Aug 24 Javascript
vue+elementui实现点击table中的单元格触发事件--弹框
Jul 18 Javascript
Javascript表单序列化原理及实现代码详解
Oct 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自定义函数返回多个值
2006/11/26 PHP
php网站被挂木马后的修复方法总结
2014/11/06 PHP
php获取随机数组列表的方法
2014/11/13 PHP
php从文件夹随机读取文件的方法
2015/06/01 PHP
php根据地址获取百度地图经纬度的实例方法
2019/09/03 PHP
PHP使用JpGraph绘制折线图操作示例【附源码下载】
2019/10/18 PHP
iframe自适应宽度、高度 ie6 7 8,firefox 3.86下测试通过
2010/07/29 Javascript
jQuery + Flex 通过拖拽方式动态改变图片的代码
2011/08/03 Javascript
js实现网页自动刷新可制作节日倒计时效果
2014/05/27 Javascript
js调试系列 源码定位与调试[基础篇]
2014/06/18 Javascript
jQuery学习笔记之 Ajax操作篇(三) - 过程处理
2014/06/23 Javascript
详解JavaScript基于面向对象之创建对象(2)
2015/12/10 Javascript
js格式化输入框内金额、银行卡号
2016/02/01 Javascript
Bootstrap下拉菜单样式
2017/02/07 Javascript
AngulaJS路由 ui-router 传参实例
2017/04/28 Javascript
js图片加载效果实例代码(延迟加载+瀑布流加载)
2017/05/12 Javascript
JavaScript实现的仿新浪微博原生态输入字数即时检查功能【兼容IE6】
2017/09/26 Javascript
详解Vue路由钩子及应用场景(小结)
2017/11/07 Javascript
vue iView 上传组件之手动上传功能
2018/03/16 Javascript
django js 实现表格动态标序号的实例代码
2019/07/12 Javascript
利用JavaScript的Map提升性能的方法详解
2019/08/14 Javascript
Node Express用法详解【安装、使用、路由、中间件、模板引擎等】
2020/05/13 Javascript
详解Python的Lambda函数与排序
2016/10/25 Python
Python基础练习之用户登录实现代码分享
2017/11/08 Python
为什么Python中没有"a++"这种写法
2018/11/27 Python
python下载微信公众号相关文章
2019/02/26 Python
对pyqt5之menu和action的使用详解
2019/06/20 Python
Python队列RabbitMQ 使用方法实例记录
2019/08/05 Python
window环境pip切换国内源(pip安装异常缓慢的问题)
2019/12/31 Python
使用Python实现批量ping操作方法
2020/05/06 Python
使用HTML5技术开发一个属于自己的超酷颜色选择器
2013/09/22 HTML / CSS
Kathmandu澳洲户外商店:新西兰户外运动品牌
2017/11/12 全球购物
2015年南京大屠杀纪念日活动总结
2015/03/24 职场文书
忠诚与背叛观后感
2015/06/04 职场文书
python实现监听键盘
2021/04/26 Python
《雀魂PONG☆》4月1日播出 PV角色设定情报
2022/03/20 日漫