少し前にGreasemonkeyを書いてるときにはまったところがあります。
addEventListenerした関数を手動で呼び出せなくて困ったのです。詳細は以下の日記で。
グリモンを書いてるときにはまったところ - maru source
call()
で、今日id:mollifierさんから「call()を使うと良いよ」というコメントを頂、mozillaのURLを教えてもらったので早速読んでみました。
https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Function/call
var result = fun.call(thisArg[, arg1[, arg2[, ...]]]);
thisArg
Determines the value of this inside fun.
ふむふむ、myFunc.call(obj)と呼び出すと、myFunc内のthisの指す先がobjになるみたいです。
早速コードを書いてみた
function myFunc(e){ alert(this.id); if(e) alert(e.pageX); } var obj0 = {id:"obj0"}; var obj1 = {id:"obj1"}; var div = document.getElementById("divTag"); myFunc.call(obj0); myFunc.call(obj1); myFunc.call(div); div.addEventListener("click" , myFunc , true);
実行するとidを表示するalertが3つでます。
obj0 obj1 divTag
そしてid="divTag"のタグをクリックするとidとクリックされたX座標を表示するalertが2つでます。
divTag 15
おおー、これは便利><
教えていただき、ありがとうございます。id:mollifier
javascript、まだまだ知らないことだらけです。