addEventListenerのthisって何か変

 この前書いてた、グリモン用のJavascriptのキーマップ。何で関数とかをprototypeにするとエラーが出るのかと、色々試してて気づいたけど、何かthisが変じゃないかと思ったりした。
 つまり、この前書いてた、keymapの例で行くと、あれの関数をprototypeにしてクラスみたいなのに変えると

hoge.addEventListener("keydown", hoge.keymap.handle(),true);

 で関数handlerの中のthisの表記がおかしくなる。keymap.handleのthisだったらkeymapがthisになりそうだけど、hogeになる感じ。多分、hoge.addEventListenerのthisがhogehogeになるみたいなイメージなんだろうとか思ったけど、これがあるとこの前書いたkeymapをクラスみたいにするのが大変というか変なことになる。上手く通るようにするには

hoge.addEventListener("keydown", function(evt){return hoge.keymap.handle(evt);}
				  ,true);

 とか書かないと駄目な感じで、無名関数で.addEventListenerするのが普通とは思えないし、微妙っていうかremoveEventListenerする時にまた困りそうな感じもしてみたりして、なんかバッドノウハウっぽい。
 まあ、この場合はkeymapなのでremoveしないで、keymapのmapから削除すれば、動作はしなくなりそうだけど。無駄にaddEventListenerで処理するのが残りそう。キーマップを一つしか作らないとかなら、初めから1つだけ作ればいいけど、何個も重ねたりしないと望んだ動作を実現し難い。javascriptのイベントが、今使うイベントリスナを切り替えて動作するんじゃなくて、イベントリスナは全部存在してて、その沢山イベントリスナの中の優先順位で動いてる様子なので、ややこしい。どうせ動くのは一つなんだから、動くマップと動かないマップを毎回セットして使う方が個人的には嬉しいけど、そういう風にするとやっぱりremoveが使い難いし、全部イベントを手で書いてしまった方が楽だったりして