提供"这个"的方法到全球范围?

时间:2015-02-11 16:46:51

标签: javascript object prototype promise bluebird

我正在使用找到的debounce函数here in this stackoverflow 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而不是直接调用去抖方法。

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

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

1 个答案:

答案 0 :(得分:2)

我认为应该是

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

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

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

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