javascript - 遇到 JavaScript 对象作用域和 setTimeout 问题吗?

标签 javascript jquery settimeout

我有一些遵循以下结构的代码:

function = roulette(){

    _this = this;
    this.spin = spin;
    this.timeoutFunction = timeoutFunction;

    this.object1 = {
        x : 0
    }

    function spin(){
        if (typeof this.shuffleTimer !== 'undefined') {
            clearTimeout(_this.shuffleStart);
        }
        this.shuffleStart = setTimeout(_this.timeoutFunction(), _this.object1.x);
    }

    function timeoutFunction(){
        this.object1.x += 5;
        //do some DOM manipulation here
        console.log(_this.object.x);
        if(this.object1.x < 5000){
          this.shuffleStart = setTimeout(_this.timeoutFunction(), _this.object1.x);
        }
    }
}

它绝对没有按预期工作 - 虽然 console.log 记录 this.object1.x 正在增加,但它的速度太快且统一率,如果每次调用 timeoutFunction 中的 setTimeout 在每次调用时间增加后都被设置,那么它就不是这样工作的。

最佳答案

稍微重构了您的代码,使其与this_this函数中的使用保持一致。从传递到 setTimeout函数中删除了 ()

一切似乎都按您的预期进行。

function Roulette() {
    var _this = this;
    this.object1 = {
        x: 0
    };
    this.spin = function spin() {
        if (undefined !== this.shuffleTimer) clearTimeout(this.shuffleStart);
        this.shuffleStart = setTimeout(this.timeoutFunction, this.object1.x);
    };
    this.timeoutFunction = function timeoutFunction() {
        _this.object1.x += 5;
        console.log(_this.object1.x);
        if(_this.object1.x < 5000){
          _this.shuffleStart = setTimeout(timeoutFunction, _this.object1.x);
        }
    };
}
var r = new Roulette();
r.spin();

关于javascript - 遇到 JavaScript 对象作用域和 setTimeout 问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18341496/

相关文章:

javascript - 查找 javascript new Function() 构造函数抛出的 SyntaxError 的详细信息

javascript - 单击链接并下载文件后显示弹出窗口

javascript - JS 监听 db/cookies/localhost 文件中的更改并立即使用react

javascript - 使用 JavaScript 在网页之间共享数据

Javascript setTimeout 忽略时间参数

node.js - Nodejs中的递归重试功能

javascript - 原型(prototype)方法可以访问构造函数的上下文(闭包)

javascript - 如何根据 Google Maps API 中现有的折线坐标绘制新的折线?

javascript - 如何让ajax显示表格列表而不点击文本字段

javascript - 如何构建具有多行选项的 <select> ?