gpt4 book ai didi

javascript - 原型(prototype)继承、setTimeout 和clearTimeout

转载 作者:行者123 更新时间:2023-12-02 20:32:53 24 4
gpt4 key购买 nike

我很困惑。

我正在创建两个共享相同原型(prototype)的对象,但是当第二个对象触发 run() 方法时,我希望它能够停止在共享继承对象上设置的超时计时器(Foo.prototype.timer)。

如果我更改所有内容以使用全局变量而不是 Foo.prototype.timer,这将有效..

如果两个对象共享相同的Foo.prototype.timer,为什么不清除?

function Foo(){
// generate a random ID to show which object we're on
this.id = Math.floor(Math.random() * 1000) + 2;
}

Foo.prototype = {
run : function(){
var that = this,
count = 0;

this.stop();
function calc(){
console.log(that.id);
if( count++ < 20 )
that.timer = setTimeout( calc, 100 );
}

that.timer = setTimeout( calc, 200 );
},
stop : function(){
clearTimeout(this.timer);
}
}

// initiating

var foo = new Foo();
foo.run();

var bar = new Foo();
bar.run();

(请在控制台中复制并运行此代码以查看此问题。)

最佳答案

使用 that.timer,您无需分配给原型(prototype) - that 是实例,因此将在那里创建一个新属性。要在原型(prototype)上设置属性,您需要显式执行:

Foo.prototype.timer = setTimeout( calc, 200 ); // or, more verbose:
Object.getPrototypeOf(that).timer = setTimeout( calc, 200 );

关于javascript - 原型(prototype)继承、setTimeout 和clearTimeout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14614443/

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