gpt4 book ai didi

javascript - 如何向全局范围提供 "this"?

转载 作者:行者123 更新时间:2023-12-02 16:29:04 28 4
gpt4 key购买 nike

我正在使用发现的debounce函数 here in this stackoverflow post 。这是一个允许限制请求的 promise 。

当 debounce 函数嵌套在函数中时,由于某种原因它将无法工作,因为对请求的 setTimeout 调用似乎是一次性发送的。我认为需要直接引用。

我不能做这样的事情,因为它需要直接引用

function bounced(item){
return debounce(mockRequest, 800, 5)(item)
}

这就是它应该如何使用

var bounced = debounce(mockRequest, 800, 5)

问题是我正在创建这样的 API 对象,但这两个选项都不起作用

API.prototype.request = function(options){
return this.debounce(this.makeRequest, 1000, 2)(options)
}

API.prototype.request = this.debounce(this.makeRequest, 1000, 2) // duh

我正在寻找某种方法来使用 this 而不是直接调用 debounce 方法。

理想情况下,这样的事情会很好

API.prototype.request = function(){
return this.debounce(this.makeRequest, 1000, 2)
}()

最佳答案

我觉得应该是

API.prototype.request = API.prototype.debounce(API.prototype.makeRequest, 1000, 2)

创建该方法时,您既没有实例 (this),也没有 options 对象。这些被提供给 debounced 函数,它们被存储在其中,然后(可能稍后)用于调用所提供的函数。

顺便说一句,将 debounce 放在 API 原型(prototype)上可能没有任何意义 - 它是一个通用帮助器方法,而不是实例方法。另请注意,当您debounce()原型(prototype)方法时,所有调用都将全局去抖。如果您希望每个 API 实例都有一个队列,您最好这样做

function API() {
// in the constructor:
this.request = Helpers.debounce(this.makeRequest);
}
API.prototype.makeRequest = function() { … };
// no prototype .request() method

关于javascript - 如何向全局范围提供 "this"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28459812/

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