« HTML の <p> は paragraph ではない | トップページ | エンコード・デコードルーチンの実装(1) »

2016年9月18日 (日)

this は何?

LongDriver で、フィールドをスクロールするイベント・リスナーはメソッドではなく関数になっているので、これをメソッドにしようとしたのですが上手く行かず諦めました。試したのは次のようなコードです。


function Ground(){
    ・・・
    this.hbar = document.getElementById("hbar");
    this.deltX = 0;
    ・・・
}
var ground = new Ground();

Ground.prototype.startScroll = function(evt){
    ・・・
    this.hbar.prevX = evt.clientX;
    ・・・
    this.hbar.addEventListener("mousemove", this.hScroll, false);  // (1)
}

Ground.prototype.hScroll = function(evt){
    ・・・
    var delt = (evt.clientX - this.hbar.prevX)*scrlSp;  // (2)ここでエラー
    ・・・
}

これは Ground() 内の "hbar" で表されている水平バーの上をドラッグするとフィールドがスクロールされるということを意図したコードです。実際は (2) でエラーが発生します。その時 thiswindow になっていました。 windowhbar は無いために起きたエラーです。 thisground になると思っていたのが間違いでした。結局、イベント・リスナーはメソッドにせず、ただの関数として実装することにしました。

因みに、 (2) まで処理が進んだということは (1)thisground だと思うのですが、何故 (2)thiswindow になるんですかね? JavaScript はよく解らん。

« HTML の <p> は paragraph ではない | トップページ | エンコード・デコードルーチンの実装(1) »

フットボールのプレイ図ソフト」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/584699/64220306

この記事へのトラックバック一覧です: this は何?:

« HTML の <p> は paragraph ではない | トップページ | エンコード・デコードルーチンの実装(1) »