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 页面模板化很多人没有使用过的方法
Jun 05 Javascript
jquery中加载图片自适应大小主要实现代码
Aug 23 Javascript
javascript eval(func())使用示例
Dec 05 Javascript
jQuery中:password选择器用法实例
Jan 03 Javascript
Jquery api 速查表分享
Jan 12 Javascript
JavaScript判断数组是否包含指定元素的方法
Jul 01 Javascript
使用node.js中的Buffer类处理二进制数据的方法
Nov 26 Javascript
微信小程序 简单DEMO布局,逻辑,样式的练习
Nov 30 Javascript
详解node.js 下载图片的 2 种方式
Mar 02 Javascript
webpack3里使用uglifyjs压缩js时打包报错的解决
Dec 13 Javascript
el-form 多层级表单的实现示例
Sep 10 Javascript
解决vue初始化项目一直停在downloading template的问题
Nov 09 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 编程安全性小结
2010/01/08 PHP
有关JSON以及JSON在PHP中的应用
2010/04/09 PHP
深入浅析PHP无限极分类的案例教程
2016/05/09 PHP
php htmlentities()函数的定义和用法
2016/05/13 PHP
PHP单例模式数据库连接类与页面静态化实现方法
2019/03/20 PHP
ThinkPHP5 框架引入 Go AOP,PHP AOP编程项目详解
2020/05/12 PHP
JavaScript 语法集锦 脚本之家基础推荐
2009/11/15 Javascript
jquery validate添加自定义验证规则(验证邮箱 邮政编码)
2013/12/04 Javascript
JS动态调用方法名示例介绍
2013/12/18 Javascript
instanceof和typeof运算符的区别详解
2014/01/06 Javascript
JavaScript中的全局对象介绍
2015/01/01 Javascript
jquery马赛克拼接翻转效果代码分享
2015/08/24 Javascript
快速掌握Node.js事件驱动模型
2016/03/21 Javascript
jquery点击展示与隐藏更多内容
2016/12/03 Javascript
Base64(二进制)图片编码解析及在各种浏览器的兼容性处理
2017/02/09 Javascript
ES6新特性之Object的变化分析
2017/03/31 Javascript
Node.js实现文件上传的示例
2017/06/28 Javascript
基于JavaScript实现微信抢红包功能
2017/07/20 Javascript
jqgrid实现简单的单行编辑功能
2017/09/30 Javascript
修改npm全局安装模式的路径方法
2018/05/15 Javascript
js+html+css实现手动轮播和自动轮播
2020/12/30 Javascript
[01:43]深扒TI7聊天轮盘语音出处4
2017/05/11 DOTA
如何利用Fabric自动化你的任务
2016/10/20 Python
使用Django启动命令行及执行脚本的方法
2018/05/29 Python
django2+uwsgi+nginx上线部署到服务器Ubuntu16.04
2018/06/26 Python
python实现雪花飘落效果实例讲解
2019/06/18 Python
Tensorflow tf.tile()的用法实例分析
2020/05/22 Python
分厂厂长岗位职责
2013/12/29 职场文书
安全宣传标语
2014/06/10 职场文书
个人批评与自我批评材料
2014/10/17 职场文书
2014年审计人员工作总结
2014/12/19 职场文书
爱的教育读书笔记
2015/06/26 职场文书
超详细教你怎么升级Mysql的版本
2021/05/19 MySQL
Canvas绘制像素风图片的示例代码
2021/09/25 HTML / CSS
CPU不支持Windows11系统怎么办
2021/11/21 数码科技
Nebula Graph解决风控业务实践
2022/03/31 MySQL