javascript - 重写 XMLHttpRequest 的发送函数

标签 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);
}

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

最佳答案

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

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

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

关于javascript - 重写 XMLHttpRequest 的发送函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22787844/

相关文章:

javascript - 需要帮助循环使用 Ajax 和 Laravel 中从数据库获取的 Json 数据响应内容

javascript - 从数组中检索列的有效方法是什么?

javascript - Twitter 引导模式 URL 参数

javascript - 网站顶部的动画导航背景

javascript - 水车 slider 字幕问题

javascript - Bootstrap 移动下拉父链接问题

javascript - 使滚动效果也适用于点击

javascript - 如果同一元素存在两个事件处理程序,则事件按什么顺序处理?

javascript - 如何优化 getYoutubeViews 函数以免超出每日 Youtube API 配额?

javascript - 从不同的服务器/主机加载脚本,而不是我的