カウンタオブジェクトの作成に問題があります。私がそれをしたいのは、新しく作成されたオブジェクトでタイマーを開始することです。オブジェクト変数がグローバル変数として設定されていない限り、タイマーは起動しません。誰かがこれを見て、私を助けてくれる?ここでCounterDownタイマオブジェクトが間違った 'this'値を使用しています
はコードです:私はこのコードを入力すると
function Clock(timeInMinutes){
this.seconds = timeInMinutes * 60;
this.current = 0;
}
Clock.prototype = {
constructor: Clock,
start: function(){
function increase(){
if(this.current <= this.seconds){
console.log(this.current);
this.current++;
}
}
setInterval(increase,1000);
}
};
何も起こりません:
var clock = new Clock(1);
clock.start();
物事を私はこれを行う場合にのみ起こる:
this.current = 0;
this.seconds = 60;
なぜ "ですが私はそれが欲しいと思うように動作していない開始関数内のこの '値?
'のsetInterval(increase.bind(本)、1000)を試してみてくださいとして機能呼び出し
that= this
.Thenのプロトタイプ関数を宣言しone.so異なっています; '。 MDNには、[どのように 'が動作するか](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/this)の説明があります。 – nnnnnn@nnnnnnこの仕組みを説明できますか?増加関数が新しく作成されたオブジェクトから呼び出された場合、 'this'値はオブジェクトにバインドされません。 – Nate
いいえ、そうではありません。関数内の 'this 'の値は、その関数がどのように呼び出されるかによって決まります。 'clock.start()'のような "ドット"表記法を使うことは 'start()'の中で 'this'値が' clock'であることを意味しますが、 'increase()'はそう呼ばれません。リンクされたページを読んでください(残念ながら、数回編集されていましたが、これまでのようにはっきりしていませんが、基本はカバーしています)。 – nnnnnn