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玩一玩WSH吧
Feb 23 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
Mar 07 Javascript
javascript实现仿腾讯游戏选择
May 14 Javascript
jQuery unbind 删除绑定事件详解
May 24 Javascript
深入浅析JS Function()构造函数
Aug 22 Javascript
基于LayUI实现前端分页功能的方法
Jul 22 Javascript
JavaScript封装的常用工具类库bee.js用法详解【经典类库】
Sep 03 Javascript
详解微信小程序开发用户授权登陆
Apr 24 Javascript
jquery3和layui冲突导致使用layui.layer.full弹出全屏iframe窗口时高度152px问题
May 12 jQuery
详解如何写出一个利于扩展的vue路由配置
May 16 Javascript
javascript实现京东登录显示隐藏密码
Aug 02 Javascript
如何使用JS console.log()技巧提高工作效率
Oct 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
1 Tube Radio
2021/03/02 无线电
PHP 动态随机生成验证码类代码
2010/04/09 PHP
PHP 面向对象详解
2012/09/13 PHP
分享PHP header函数使用教程
2013/09/05 PHP
php解析xml提示Invalid byte 1 of 1-byte UTF-8 sequence错误的处理方法
2013/11/14 PHP
php制作unicode解码工具(unicode编码转换器)代码分享
2013/12/24 PHP
详解PHP序列化反序列化的方法
2015/10/27 PHP
[原创]php实现 data url的图片生成与保存
2016/12/04 PHP
Extjs学习笔记之二 初识Extjs之Form
2010/01/07 Javascript
ExtJS实现文件下载的方法实例
2013/11/09 Javascript
Javascript检查图片大小不要让大图片撑破页面
2014/11/04 Javascript
ubuntu下安装nodejs以及升级的办法
2015/05/08 NodeJs
javascript简单实现类似QQ头像弹出效果的方法
2015/08/03 Javascript
一个超简单的jQuery回调函数例子(分享)
2016/08/08 Javascript
jQuery设置图片等比例缩小的方法
2017/04/29 jQuery
基于casperjs和resemble.js实现一个像素对比服务详解
2018/01/10 Javascript
JavaScript设计模式之代理模式简单实例教程
2018/07/03 Javascript
Vue中的基础过渡动画及实现原理解析
2018/12/04 Javascript
详解TypeScript+Vue 插件 vue-class-component的使用总结
2019/02/18 Javascript
浅析vue插槽和作用域插槽的理解
2019/04/22 Javascript
微信小程序canvas绘制圆角base64图片的实现
2019/08/18 Javascript
Vue3 实现双盒子定位Overlay的示例
2020/12/22 Vue.js
python编程开发之类型转换convert实例分析
2015/11/13 Python
Python内存管理实例分析
2019/07/10 Python
Python 根据数据模板创建shapefile的实现
2019/11/26 Python
python3中关于excel追加写入格式被覆盖问题(实例代码)
2020/01/10 Python
Python实现获取当前目录下文件名代码详解
2020/03/10 Python
商铺租赁意向书
2014/04/01 职场文书
公开承诺书格式
2014/05/21 职场文书
单位工作证明范文
2014/09/14 职场文书
学前班学生评语
2014/12/29 职场文书
篮球比赛通讯稿
2015/07/18 职场文书
青年志愿者活动感想
2015/08/07 职场文书
JavaScript canvas实现流星特效
2021/05/20 Javascript
万能密码的SQL注入漏洞其PHP环境搭建及防御手段
2021/09/04 SQL Server
Mysql 8.x 创建用户以及授予权限的操作记录
2022/04/18 MySQL