gpt4 book ai didi

javascript - 如何在 Javascript 原型(prototype)中定义重复函数?

转载 作者:行者123 更新时间:2023-11-28 20:21:28 25 4
gpt4 key购买 nike

我正在尝试定义一个带有重复函数的 Javascript ,但我无法让它工作:

var Repeater = function() {
this.init.apply(this, arguments);
};

Repeater.prototype = {
run: 0, // how many runs
interval: 5, // seconds

init: function() {
this.repeat();
},

repeat: function() {
console.log(++this.run);
setTimeout(this.repeat, this.interval * 1000);
}
};

var repeater = new Repeater();

这应该如何完成?

最佳答案

试试这个代码:

var Repeater = function() {
this.run = 0; // how many runs
this.interval = 5; // seconds
this.init.apply(this, arguments);
};

Repeater.prototype.init = function() {
this.repeat();
}

Repeater.prototype.repeat = function() {
var _this = this;
console.log(++this.run);
setTimeout(function () { _this.repeat() }, this.interval * 1000);
};

var repeater = new Repeater();

我已将运行和间隔移至构造函数中,因为如果将其添加到原型(prototype)中,那么它将分布在所有实例中。

您的问题在于 seTimeout - 在您的代码中,此计时器为 repeater 设置了新范围,并且 this 不再指向 Repeater 实例,但适用于 Timeout 实例。您需要缓存 this (我将此缓存称为 _this)并将其调用到传递给 setTimeout 的新函数中。

关于javascript - 如何在 Javascript 原型(prototype)中定义重复函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18255631/

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