¡¡¡¡ÔÚc#ÖÐÓÐdelegate£¬»¹ÓÐÌØÊâµÄ¿ÉÒÔÖ±½ÓÓ¦ÓÃÓÚʼþ±à³ÌµÄdelegate£¬ÄǾÍÊÇevent¡£¶øÔÚjsÖÐûÓÐc#µÄevent£¬¸üûÓÐdelegate£¬ÓеÄÖ»ÊÇdomÔªËØÄÚÖõĵÄnativeµÄ²»¿ÉÀ©Õ¹µÄevent£¬±ÈÈçÎÞ·¨ÎªinputÔªËØÌí¼Óʼþ£¬Ö»ÄÜÔÚÆäÓµÓеÄʼþ£¨Èçonclick=handler£©ÉÏÀ©Õ¹Ó¦Óá£ÄÇôÄܲ»ÄÜ×öµ½×Ô¶¨ÒåµÄʼþÄ£ÄâЧ¹ûÄØ£¿´ð°¸Êǿ϶¨µÄ£¬Ò²¾ÍÊDZ¾ÎĵÄÖ÷Ìâ¡£ ¡¡¡¡Ê×ÏÈŪÃ÷°×Ò»ÏÂʼþµÄÒâͼ¡ª¡ª¿ÉÒÔÔÚ·¢ÉúÒ»¼þʵÄʱºòÖ´ÐжîÍâµÄ´úÂ룬Èçdocument.attachEvent('onclick', function(){alert('u click document')})£¬µ±µã»÷Ò³ÃæÊ±£¨Ê¼þ·¢ÉúÁË£©£¬¾Í»áÖ´ÐÐÎÒÃÇΪÆä¹Ò½ÓµÄÆäËü´úÂ루jsÖÐÒÔfunctionΪÓï¾ä¼¯ºÏ£¬ÒÔϳÆÎªfunction£©£¬µ±È»ÎÒÃÇ¿ÉÒÔÔÚÒ»¸öʼþÉϹҽÓÈÎÒâ¶àµÄfunction£¬ÕâÑù¾ÍʵÏÖÁËÒ»ÖÖÁé»îµÄ¿ÉÀ©Õ¹±à³Ì½Ó¿Ú¡£ÊÔÏëÈç¹û¿ÉÒÔÏñÔÚÔªËØÊ¼þÀ©Õ¹Ó¦ÓÃÒ»Ñù¿ÉÒÔÔÚÈÎÒâ¶ÔÏóµÄÈÎÒâ·½·¨ÉÏÀ©Õ¹£¬ÄǶÔÓÚjs±à³ÌÀ´½²¾Í¸ü¼ÓÁé»îÁË¡£ÏÈ¿´Ò»¸öÀý×Ó£¬Æ½Ê±ÎÒÃǰÑÏà¶Ô¶ÔÁ¢µÄÒ»¸ö¹¦ÄÜÃüÃûΪһ¸öfunction£¬²¢ÔÚÐèÒªµÄµØ·½£¨Í¨³£ÊÇÁíÒ»¸öfunction£©µ÷ÓÃÒÔʵÏÖ´úÂ븴Ó㺠function F(){ this.method = function(){ alert('f.method is called') g(); } } function g(){ alert(123) } var f = new F(); f.method() ÎÒÃǰÑf.methodÖÐÖ±½Óµ÷ÓÃg¸ÄдһÏ£¬·â×°µ½Ò»¸öEvent¶ÔÏóÖдﵽһÑùµÄЧ¹û£¬´úÂëÈçÏ£º var Event = { __list:[], observe:function(obj, ev, fun){ this.__list.push({o:obj, e:ev, f:fun}) }, occor:function(obj, method){ var arr = [] for(var i=0; i<this.__list.length; i++){ if(this.__list[i].o==obj && this.__list[i].e==method) arr.push(this.__list[i]); } for(var i=0; i<arr.length; i++){ arr[i].f(); } } }
function F(){ this.method = function(){ alert('f.method is called') Event.occor(this, 'method'); } } var f = new F(); Event.observe(f, 'method', function(){alert(123)}) f.method()ÕâÑùÕ§¿´ÉÏÈ¥ºÃÏñ·ÑÁË¡°Ì«¶à¡±¹¦·ò£¬µ«È´°Ñ¡°ÔÚfÖе÷ÓÃgµÄд·¨¡±¸üͨÓû¯ÁË£¬Èç¹ûÒªÔÚfÖе÷ÓÃhÔòÖ»ÐèÒª¶àЩһÐÐEvent.occor(this, 'methodName')£¬Ð´µ½ÕâÀïÄã¿Ï¶¨Ò²×¢Òâµ½methodNameµÄд·¨ºÍ×ʼµÄд·¨ÊÇÒ»ÑùµÄ£¬¶¼ÊÇÓ²±àµÄ²»¾ßÁé»îÐÔ£¬Èç¹ûÔÚÿ¸öÀàµÄ·½·¨Öж¼Ð´ÈëEvent.occor(this, 'method')¾ÍÌ«²»ÑŹÛÁË£¬Ò²±³ÀëÁËÎÒÃǵijõÖÔ£¬¶¯Ì¬ÐÞ¸ÄÒ»ÏÂmethod°ÑËü¼Óµ½×îºóÒ»ÐоÍokÁË£¬ÏÂÒ»²½¾ÍÊǽâ¾öËü£¬¸Ä½ø´úÂëÈçÏ£º var Event = { __list:[], observe:function(obj, ev, fun){ this.__list.push({o:obj, e:ev, f:fun}) }, occor:function(obj, method){ var arr = [] for(var i=0; i<this.__list.length; i++){ if(this.__list[i].o==obj && this.__list[i].e==method) arr.push(this.__list[i]); } for(var i=0; i<arr.length; i++){ arr[i].f(); } }, inject:function(obj){ for(var p in obj){ obj[p] = new Function(obj[p].toString().replace('function(){', '').replace('}', 'Event.occor(this,p)')) } } } function F(){ this.method = function(){ alert('f.method is called') } } var f = new F(); Event.inject(f); Event.observe(f, 'method', function(){alert(123)}) f.method()ÎÒÃǰÑÏÔʾµÄÔÚ±»µ÷Ó÷½·¨ÌåÄÚµ÷ÓÃEvent.occor¸Äдµ½Event.injectÖС£µ½´ËÎÒÃǾͼòµ¥£¨»¹ÓÐһЩ°²È«´úÂëûÓд¦Àí£¬ÈçûÓÐÅжÏobj[p]ÊÇ·ñÐèÒª±»¸Äд¡¢Ã»ÓвâÊÔЧÂÊÎÊÌ⣬ûÓд¦Àí¸ü¶àÌí¼ÓEvent.occorʱµÄÂß¼Åжϣ¬ÏÂÒ»²½×¼±¸°ÑËüʵÏÖΪһ¸öObserveable¶ÔÏ󣬾͸ü¼ÓÁé»îÁË£©µÄÍê³ÉÁË×Ô¶¨Òåʼþ¡£
|