当前位置: 首页 > 面试题库 >

Javascript setInterval和`this`解决方案

左丘烨烁
2023-03-14
问题内容

我需要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);
}


 类似资料:
  • 本文向大家介绍mysql 报错This function has none of DETERMINISTIC解决方案,包括了mysql 报错This function has none of DETERMINISTIC解决方案的使用技巧和注意事项,需要的朋友参考一下 本文章向朋友们介绍开启bin-log日志mysql报错:This function has none of DETERMINISTI

  • 本文向大家介绍React中this丢失的四种解决方法,包括了React中this丢失的四种解决方法的使用技巧和注意事项,需要的朋友参考一下 发现问题 我们在给一个dom元素绑定方法的时候,例如: React组件中不能获取refs的值,页面报错提示:Uncaught TypeError: Cannot read property 'refs' of null or undefind 小栗子 Reac

  • 本文向大家介绍apache You don't have permission to access /test.php on this server解决方法,包括了apache You don't have permission to access /test.php on this server解决方法的使用技巧和注意事项,需要的朋友参考一下 键字: Apache   403  Forbidde

  • 本文向大家介绍JS this关键字在ajax中使用出现问题解决方案,包括了JS this关键字在ajax中使用出现问题解决方案的使用技巧和注意事项,需要的朋友参考一下 背景:   在一次web网站开发维护中,使用手机验证码进行登录。再点击获取手机验证码时,验证码按钮并没有置灰,同时也没有出现倒数读秒的效果。 设置按钮倒数60秒前端代码: 在向后端请求获取短信验证码成功之后,调用sendCode()

  • 本文向大家介绍Eclipse 出现A configuration with this name already exists问题解决方法,包括了Eclipse 出现A configuration with this name already exists问题解决方法的使用技巧和注意事项,需要的朋友参考一下 Eclipse 出现A configuration with this name alrea