向全球范围提供 "this" 的方式?

Way to provide "this" to the global scope?

我正在使用 debounce 找到的函数 here in this Whosebug post。这是一个允许限制请求的承诺。

当 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 的原型上可能没有任何意义 - 它是通用辅助方法,而不是实例方法。另请注意,当您 debounce() 原型方法时,您的 all 调用将 globally 去抖动。如果你想每个 API 的实例都有一个队列,你最好做

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