よくわかりません。
同じプロトタイプを共有する 2 つのオブジェクトを作成していますが、2 番目のオブジェクトがメソッドを起動すると、共有継承オブジェクト( )run()
に設定されているタイムアウトが停止することが期待されます。timer
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();
(この問題を確認するには、このコードをコピーしてコンソールで実行してください。)