gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 18:26:07 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com