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+xml技术实现分页浏览
Jul 27 Javascript
Jquery 组合form元素为json格式,asp.net反序列化
Jul 09 Javascript
对 jQuery 中 data 方法的误解分析
Jun 18 Javascript
js实现的捐赠管理完整实例
Jan 20 Javascript
JS实现点击文字对应DIV层不停闪动效果的方法
Mar 02 Javascript
JQuery实现级联下拉框效果实例讲解
Sep 17 Javascript
全面了解javascript中的错误处理机制
Jul 18 Javascript
jQuery简单注册和禁用全局事件的方法
Jul 25 Javascript
Vue.js render方法使用详解
Apr 05 Javascript
JavaScript之promise_动力节点Java学院整理
Jul 03 Javascript
Vue组件间通信 Vuex的用法解析
Aug 05 Javascript
解决vue单页面应用打包后相对路径、绝对路径相关问题
Aug 14 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
星际争霸任务指南——人族
2020/03/04 星际争霸
php正则表达式学习笔记
2015/11/13 PHP
漂亮的widgets,支持换肤和后期开发新皮肤
2007/04/23 Javascript
用javascript实现的支持lrc歌词的播放器
2007/05/17 Javascript
关于window.pageYOffset和document.documentElement.scrollTop
2011/04/05 Javascript
javascript特殊用法示例介绍
2013/11/29 Javascript
jQuery获取iframe的document对象的方法
2014/10/10 Javascript
jQuery插件zoom实现图片全屏放大弹出层特效
2015/04/15 Javascript
jQuery each函数源码分析
2016/05/25 Javascript
谈谈PHP中相对路径的问题与绝对路径的使用
2016/08/16 Javascript
Angular 4 依赖注入学习教程之FactoryProvider的使用(四)
2017/06/04 Javascript
jQuery实现鼠标响应式淘宝动画效果示例
2018/02/13 jQuery
JavaScript实现短暂提示框功能
2018/04/04 Javascript
nuxt 实现在其它js文件中使用store的方式
2020/11/05 Javascript
详细介绍Python语言中的按位运算符
2013/11/26 Python
python应用程序在windows下不出现cmd窗口的办法
2014/05/29 Python
Python与Redis的连接教程
2015/04/22 Python
Python进阶学习之特殊方法实例详析
2017/12/01 Python
Python with语句上下文管理器两种实现方法分析
2018/02/09 Python
Python+OpenCV实现车牌字符分割和识别
2018/03/31 Python
python调用百度REST API实现语音识别
2018/08/30 Python
spark dataframe 将一列展开,把该列所有值都变成新列的方法
2019/01/29 Python
jupyter notebook中新建cell的方法与快捷键操作
2020/04/22 Python
Python使用lambda抛出异常实现方法解析
2020/08/20 Python
python调用百度API实现人脸识别
2020/11/17 Python
HTML5的结构和语义(1):前言
2008/10/17 HTML / CSS
英国领先的办公用品供应商:Viking
2016/08/01 全球购物
LVMH旗下最大的奢侈品网站平台:24S
2020/05/24 全球购物
最新英语专业学生求职信范文
2013/09/21 职场文书
金融专业个人求职信范文
2013/11/28 职场文书
小学生考试获奖感言
2014/01/30 职场文书
学期个人自我总结
2015/02/13 职场文书
2015年幼师工作总结
2015/04/28 职场文书
应收账款管理制度
2015/08/06 职场文书
python numpy中multiply与*及matul 的区别说明
2021/05/26 Python
python opencv旋转图片的使用方法
2021/06/04 Python