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 相关文章推荐
html+css+js实现xp window界面及有关功能
Mar 26 Javascript
JQuery中操作Css样式的方法
Feb 12 Javascript
JavaScript中数组成员的添加、删除介绍
Dec 30 Javascript
JS中字符串trim()使用示例
May 26 Javascript
JavaScript中的anchor()方法使用详解
Jun 08 Javascript
js for循环倒序输出数组元素的实例
Mar 01 Javascript
Node.js + express实现上传大文件的方法分析【图片、文本文件】
Mar 14 Javascript
Angular8基础应用之表单及其验证
Aug 11 Javascript
Javascript如何实现双指控制图片功能
Feb 25 Javascript
jQuery 图片查看器插件 Viewer.js用法简单示例
Apr 04 jQuery
基于vue中的scoped坑点解说
Sep 04 Javascript
JS时间戳与日期格式互相转换的简单方法示例
Jan 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
imagettftext() 失效,不起作用
2021/03/09 PHP
用YUI做了个标签浏览效果
2007/02/20 Javascript
JQuery动态创建DOM、表单元素的实现代码
2011/08/09 Javascript
[JSF]使用DataModel处理表行事件的实例代码
2013/08/05 Javascript
JavaScript动态插入script的基本思路及实现函数
2013/11/11 Javascript
表单提交前触发函数返回true表单才会提交
2014/03/11 Javascript
javascript中声明函数的方法及调用函数的返回值
2014/07/22 Javascript
使用js dom和jquery分别实现简单增删改
2014/09/11 Javascript
jQuery判断当前点击的是第几个li的代码
2014/09/26 Javascript
javascript基本包装类型介绍
2015/04/10 Javascript
Nodejs中Express 常用中间件 body-parser 实现解析
2017/05/22 NodeJs
详解jQuery中关于Ajax的几个常用的函数
2017/07/17 jQuery
iview给radio按钮组件加点击事件的实例
2017/09/30 Javascript
详解如何在Vue项目中发送jsonp请求
2019/10/25 Javascript
JavaScript 俄罗斯方块游戏实现方法与代码解释
2020/04/08 Javascript
Element Carousel 走马灯的具体实现
2020/07/26 Javascript
JS图片懒加载技术实现过程解析
2020/07/27 Javascript
用python实现面向对像的ASP程序实例
2014/11/10 Python
简单的python后台管理程序
2017/04/13 Python
Pycharm无法使用已经安装Selenium的解决方法
2018/10/13 Python
使用python的pexpect模块,实现远程免密登录的示例
2019/02/14 Python
Python3.6.x中内置函数总结及讲解
2019/02/22 Python
Django实现网页分页功能
2019/10/31 Python
利用django model save方法对未更改的字段依然进行了保存
2020/03/28 Python
VScode连接远程服务器上的jupyter notebook的实现
2020/04/23 Python
详解python UDP 编程
2020/08/24 Python
pytorch 计算Parameter和FLOP的操作
2021/03/04 Python
纯CSS3实现Material Design效果
2017/03/09 HTML / CSS
HTML5页面直接调用百度地图API获取当前位置直接导航目的地的实现代码
2018/03/02 HTML / CSS
电大自我鉴定
2013/10/27 职场文书
文明学生事迹材料
2014/01/29 职场文书
园林专业毕业生自荐信
2014/07/04 职场文书
2015年度个人工作总结报告
2015/10/24 职场文书
原来闭幕词是这样写的呀!
2019/07/01 职场文书
神州牡丹园的导游词
2019/11/20 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers