覆盖XMLHttpRequest的send函数

时间:2014-04-01 13:46:02

标签: javascript

我有这段代码覆盖了XMLHttpRequest的发送功能。

var sendOrig = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send = function() {
    var args = arguments;
    var self = this;

    setTimeout(function() {

        // Do something.

        self.addEventListener("readystatechange", function() {
            if(this.readyState == 4) {

                // Do something else.

            }
        });

        sendOrig.apply(self, args);

    }, 0);
}

在这种情况下,事件监听器是否堆积在一起还是收集了垃圾?如果没有,我将如何实现这一目标?

1 个答案:

答案 0 :(得分:0)

每次调用XHR.send(),它都会创建新的函数作为事件监听器。但是如果在处理程序中需要一个闭包(即你访问自变量),这是唯一的方法。

使用它时,应确保清除存储引用XHR的每个属性,以使垃圾收集从内存中正确清除处理程序。

var XHR = new XMLHttpRequest();
//...
XHR.send(...);
//...
XHR = null; //not needed anymore - make sure GC can remove its handlers