JavaScriptでストップウォッチクラスを作成しました。ユーザーが「ストップウォッチの開始」ボタンをクリックすると、ストップウォッチが開始されます。
私の問題は、ユーザーが「ストップウォッチの開始」ボタンをクリックすると、「これ」がストップウォッチオブジェクトではなくボタンを参照していることです。
助言がありますか?
次に例を示します: https ://c9.io/rjfreund/stopwatch/workspace/stopwatch.html
JavaScriptでストップウォッチクラスを作成しました。ユーザーが「ストップウォッチの開始」ボタンをクリックすると、ストップウォッチが開始されます。
私の問題は、ユーザーが「ストップウォッチの開始」ボタンをクリックすると、「これ」がストップウォッチオブジェクトではなくボタンを参照していることです。
助言がありますか?
次に例を示します: https ://c9.io/rjfreund/stopwatch/workspace/stopwatch.html
jQueryを使用しているため:
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
....bind()
または.on()
を使用してハンドラーをバインドし、オブジェクトをevent-dataに設定します。
$('.yourElement').on("click", {obj: yourObject}, function(event) {
alert(event.data.obj);
});
これは、コードなしでできる最善の方法です。
<a id="start_stopwatch" onclick="yourStopwatchClass.start.call(yourStopwatchClass)">Start stopwatch!</a>
call
変数は、this
渡したもの、この場合はStopwatch
クラスを参照します。
関数の値は、関数のthis
呼び出し方法によって設定されます。リスナーの場合、次のように割り当てられている場合:
element.onclick = instance.method;
次に、多かれ少なかれ要素のメソッドとしてハンドラーによって呼び出され、要素に設定this
されます。他の方法 (addEventListener
およびさまざまなライブラリ スキーム) を使用してリスナーをアタッチすると、同じことが行われます。
call
またはを使用できapply
ますが、関数をラップして呼び出してthis
、必要なオブジェクトに設定することもできます。
element.onclick = funciotn() {insance.method()};