gpt4 book ai didi

Javascript setTimeout 和原型(prototype)

转载 作者:行者123 更新时间:2023-11-28 13:22:26 26 4
gpt4 key购买 nike

我的任务非常简单,我需要两个工作人员运行。

var taskNum = 0;

function Task() {
var me = this;
this.name = '#' + ++taskNum;

Task.prototype.run = function () {
console.log(me.name);
setTimeout(me.run, 1000);
}
}

var t1 = new Task();
t1.run();
var t2 = new Task();
t2.run();

输出应该是 1,2,1,2,但它是: 1 2 1 2 2 2 2 2 2

这可以通过将“Task.prototype.run”更改为“this.run”来解决。但是可以通过不删除原型(prototype)来解决这个问题吗,因为我在复杂的解决方案中需要它?

最佳答案

这是因为您在构造函数本身内重写了 Task.protoype.run,并将新版本设置为使用最新的 me 变量。

构建类的更常见方法是:

var taskNum = 0;

function Task() {
this.name = '#' + ++taskNum;
}

Task.prototype.run = function () {
console.log(this.name);
setTimeout(Task.prototype.run.bind(this), 1000);
}

var t1 = new Task();
t1.run();
var t2 = new Task();
t2.run();

关于Javascript setTimeout 和原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32034438/

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