読者です 読者をやめる 読者になる 読者になる

call()を使うと幸せになれた

tech

少し前に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、まだまだ知らないことだらけです。