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控制上传文件的大小
Oct 26 Javascript
jQuery 处理表单元素的代码
Feb 15 Javascript
html向js方法传递参数具体实现
Aug 08 Javascript
Jquery 动态循环输出表格具体方法
Nov 23 Javascript
JS获取select的value和text值的简单实例
Feb 26 Javascript
JQuery选择器、过滤器大整理
May 26 Javascript
jQuery插件echarts实现的去掉X轴、Y轴和网格线效果示例【附demo源码下载】
Mar 04 Javascript
VUE元素的隐藏和显示(v-show指令)
Jun 23 Javascript
Node.js  事件循环详解及实例
Aug 06 Javascript
JavaScript闭包与作用域链实例分析
Jan 21 Javascript
JavaScript switch语句使用方法简介
Dec 30 Javascript
解决vue-router 切换tab标签关闭时缓存问题
Jul 22 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
晶体管单管来复再生式收音机
2021/03/02 无线电
php md5下16位和32位的实现代码
2008/04/09 PHP
PHP实现上一篇下一篇的方法实例总结
2016/09/22 PHP
才发现的超链接js导致网页中GIF动画停止的解决方法
2007/11/02 Javascript
JS在IE和FF下attachEvent,addEventListener学习笔记
2009/11/26 Javascript
详解JavaScript对Date对象的操作问题(生成一个倒数7天的数组)
2015/10/01 Javascript
学习javascript面向对象 实例讲解面向对象选项卡
2016/01/04 Javascript
jQuery弹出层插件popShow(改进版)用法示例
2017/01/23 Javascript
Vue.js中用webpack合并打包多个组件并实现按需加载
2017/02/17 Javascript
详解Vue路由开启keep-alive时的注意点
2017/06/20 Javascript
vue中实现左右联动的效果
2018/06/22 Javascript
微信小程序之onLaunch与onload异步问题详解
2019/03/28 Javascript
Vue scoped及deep使用方法解析
2020/08/01 Javascript
js实现tab栏切换效果
2020/08/02 Javascript
python基于urllib实现按照百度音乐分类下载mp3的方法
2015/05/25 Python
详解Python的collections模块中的deque双端队列结构
2016/07/07 Python
浅谈django的render函数的参数问题
2018/10/16 Python
nginx黑名单和django限速,最简单的防恶意请求方法分享
2019/08/09 Python
Python实现Word表格转成Excel表格的示例代码
2020/04/16 Python
python操作微信自动发消息的实现(微信聊天机器人)
2020/07/14 Python
python 实现单例模式的5种方法
2020/09/23 Python
基于pycharm 项目和项目文件命名规则的介绍
2021/01/15 Python
用html5绘制折线图的实例代码
2016/03/25 HTML / CSS
AC Lens:购买隐形眼镜
2017/02/26 全球购物
全球性的在线购物网站:Zapals
2017/03/22 全球购物
澳大利亚家具和家居用品在线商店:Interiors Online
2018/03/05 全球购物
来自Ocado的宠物商店:Fetch
2018/07/10 全球购物
英国排名第一的冲浪店:Ann’s Cottage
2020/06/21 全球购物
如何实现jdbc性能优化
2012/07/30 面试题
static关键字的用法
2013/10/07 面试题
销售高级职员求职信
2013/10/29 职场文书
自我鉴定书
2014/03/24 职场文书
房屋租赁意向书
2014/04/01 职场文书
实习生岗位职责
2014/04/12 职场文书
小学亲子活动总结
2014/07/01 职场文书
2016年清明节寄语
2015/12/04 职场文书