Javascript setInterval和`this`解决方案

我需要thissetInterval处理程序访问

prefs: null,

startup : function()

{

// init prefs

...

this.retrieve_rate();

this.intervalID = setInterval(this.retrieve_rate, this.INTERVAL);

},

retrieve_rate : function()

{

var ajax = null;

ajax = new XMLHttpRequest();

ajax.open('GET', 'http://xyz.com', true);

ajax.onload = function()

{

// access prefs here

}

}

如何在中访问this.prefs ajax.onload

回答:

setInterval行应如下所示:

 this.intervalID = setInterval(

(function(self) { //Self-executing func which takes 'this' as self

return function() { //Return a function in the context of 'self'

self.retrieve_rate(); //Thing you wanted to run as non-window 'this'

}

})(this),

this.INTERVAL //normal interval, 'this' scope not impacted here.

);

:相同的原则适用于“

onload”。在这种情况下,“外部”代码几乎不做任何事情,它只是建立一个请求,然后发送它。在这种情况下,不需要上面代码中的额外功能。您的retrieve_rate应该看起来像这样:-

retrieve_rate : function()

{

var self = this;

var ajax = new XMLHttpRequest();

ajax.open('GET', 'http://xyz.com', true);

ajax.onreadystatechanged= function()

{

if (ajax.readyState == 4 && ajax.status == 200)

{

// prefs available as self.prefs

}

}

ajax.send(null);

}

以上是 Javascript setInterval和`this`解决方案 的全部内容, 来源链接: utcz.com/qa/410733.html

回到顶部