[英]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.