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));