JavaScriptではattachEventなどから呼ばれたコールバック関数のスコープはwindowオブジェクトになるので、オブジェクトのメソッドなどを指定した場合、thisはundefindになってしまう。

この問題はapply関数を用いて解決する。


function funcApply(func, obj)
{
return function()
{
return func.apply(obj, arguments);
};
}


上の関数を以下のように使う。


obj.attachEvent('onclick', funcApply(this.func, this));


または以下のようにして引数を渡すこともできる。


obj.attachEvent('onclick', funcApply(function(){this.func(param);}, this));