dojo.connect的实现方法
发布时间:2020-12-16 21:42:22 所属栏目:百科 来源:网络整理
导读:dojo.connect(object1,'method1',object2,'method2'); 有了这段代码以后,每当执行object1.metohd1();以后,都会立即执行object2.method2(). 这就像在object1上注册了一个type名为method1的event. event会触发object2.method2. object1并不一定是一个dom no
dojo.connect(object1,'method1',object2,'method2'); 有了这段代码以后,每当执行object1.metohd1();以后,都会立即执行object2.method2(). 这就像在object1上注册了一个type名为method1的event. event会触发object2.method2. object1并不一定是一个dom node,dojo.connect是怎么做到对object1注册event? 一切都是假象。 dojo.connect并没有像dom event一样注册一个event。它其实是将原函数做了修改。下面一小段code说明了dojo.connect中到底对原函数做了什么。 // 伪代码 dojo.connect(object1,methodName1,methodName2) { var f = object1[methodName1]; var attach = dojo.hitch(object2,methodName2); var listeners = f.listeners||[]; listeners.push(attach); var d = function() { var ap = Array.prototype; var c = arguments.callee; var l = c.listeners; var t = c.target; var r = t.apply(this,arguments); for (i in l) { if (! (i in ap)) { l[i].apply(this,arguments); } } return r; }; d.target=f; d.listeners = listeners; object1[methodName1]=d; } 从上面代码看出,dojo.connect创建一个新的函数,在此函数中,先执行原函数,再依次执行listener中的函数。 把这个函数重新assign给自己,为了能保存住原函数和listener,dojo.connect为新创建的函数增加了target和listeners两个属性。 dojo.connect的漏洞在于,一旦对原函数重新复制,listener和修改后的函数就完全丢掉了。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |