谈谈javascript事件绑定和Prototype的事件绑定

本文探讨了JavaScript中如何避免因事件监听器导致的内存泄漏问题。通过对比传统的attachEvent方法与Prototype框架提供的Event.observe方法,说明了后者如何自动处理事件监听器的卸载,从而有效防止内存泄漏。

在javascript中我们习惯用
 object.attachEvent("OnDisConnected", DisConnected); 

这样的方式来绑定组件触发OnDisConnected事件的处理方法,DisConnected。

但是有一点,这样写的话要在页面的onunload事件中就需要对其进行卸载--detachEvent。

否则这个过程就会一直驻留在内存中。有可能会导致内存泄露。

These handlers will stay in RAM, filling it up slowly, clogging the browser’s arteries. This is known as a memory leak.(Protytype中的解释)。

Prototype对绑定事件进行了封装。


 Event.observe(object, 'DisConnected',DisConnected);

  observe: function(element, name, observer, useCapture) {
    element 
= $(element);
    useCapture 
= useCapture || false;

    
if (name == 'keypress' &&
      (Prototype.Browser.WebKit 
|| element.attachEvent))
      name 
= 'keydown';

    Event._observeAndCache(element, name, observer, useCapture);
  }
,

 

这样,prototype就会自己来处理卸载绑定。

 


  unloadCache: 
function() {
    
if (!Event.observers) return;
    
for (var i = 0, length = Event.observers.length; i < length; i++{
      Event.stopObserving.apply(
this, Event.observers[i]);
      Event.observers[i][
0= null;
    }

    Event.observers 
= false;
  }
,

 

当页面unload时就会从内存中将其卸载。

What’s even better is, Prototype automatically hooks unloadCache to page unloading, exclusively for MSIE. So you don’t have anything to do.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值