gpt4 book ai didi

Javascript:如何在处理程序中保留对请求发起者的引用?

转载 作者:行者123 更新时间:2023-11-30 09:07:59 25 4
gpt4 key购买 nike

我通常不是 Javascript 的人,但我一直在潜心阅读 Douglas Crockford's book ,并编写一些琐碎的、有用的花絮作为 Chrome 扩展和 Node.js (请注意,这个问题与他们中的任何一个都无关)。

现在,我正在尝试弄清楚如何保留对发起 AJAX 请求的对象的引用,即:一旦我设置了 onload 事件处理程序(这是来自 Chrome 扩展程序内部,所以我使用基础 XMLHttpRequest 对象),有什么方法可以让我在以下示例中返回到 MyObject:

MyObject.prototype = {
PerformAction: function() {
this.Request = new XMLHttpRequest();
this.Request.open("GET", this.ConstructUrl(), true);
// From within ActionResultHandler, 'this' will always be the XMLHttpRequest
this.Request.onload = this.ActionResultHandler,
this.Request.send(null);
}
}

这样做就是将 this 指定为请求对象本身,如果我简单地引入一个包装器:

this.Request.onload = function() { ActionResultHandler() };

好吧,这不会做任何事情,因为 ActionResultHandler 现在超出了范围。我在这里问的原因是因为我只发现了调用者操作的微不足道的情况(例如操作 this 从函数内部引用的内容),但考虑到 OO-ified Javascript 和 AJAX 从字面上看在任何地方,这都必须是一个已知的、简单的问题,但我的 Google-fu 在这里让我失望了。在 C# 中,事件是在附加到它们的任何人的上下文中调用的,而不是触发事件的对象,因此这不会每天都出现。也许有更好的 JS 模式可以完全避免这个问题?

最佳答案

我不太清楚您想引用哪个变量。以下是如何在加载处理程序中保留对 MyObject 的引用:

MyObject.prototype = {
PerformAction: function() {
var MyObjectRef = MyObject,
ActionResultHandler = this.ActionResultHandler;

this.Request = new XMLHttpRequest();
this.Request.open("GET", this.ConstructUrl(), true);
// From within ActionResultHandler, 'this' will always be the XMLHttpRequest
this.Request.onload = function () {
ActionResultHandler.apply(MyObjectRef, arguments);
};
this.Request.send(null);
}
}

已编辑

好的,我再次阅读了你的问题,你似乎想在 MyObject 的上下文中执行 ActionResultHandler,所以我调整了我的代码来执行此操作。

关于Javascript:如何在处理程序中保留对请求发起者的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3198264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com