繁体   English   中英

如何向全球范围提供“此”?

[英]Way to provide “this” to the global scope?

我正在使用在此stackoverflow帖子中找到的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)
}()

我认为应该

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM