源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

dess中一个简单的多路委托的实现

  • 时间:2022-05-29 00:38 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:dess中一个简单的多路委托的实现
[u]复制代码[/u] 代码如下:
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事件派发。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部