@RoryMcCrossanの答えは正しいものです。理由は次のとおりです。JSはアドホックthis
を参照するものを決定します。つまり、関数が呼び出されると、呼び出しコンテキストを調べます。
myObject.property = function(){console.log(this)}
myObject.property();
/\ ||
||who called |
|_____________
関数がオブジェクトのメソッドとして呼び出されなかった場合thisId
( . および
を使用して、プログラムで呼び出しコンテキストを決定できます。これは、jQuery が舞台裏で行うことです。this
window
functionName.call(context)
functionName.apply(context,[arguments]);
$.fn.on(evt,callback)//simplified
{//jQ sets up its own event handler that looks like this:
//here, this point to $("#my_div") in your case, so:
var jQhandler = function(e)
{
callback.apply(this,[e]);//passes the event as an argument
};
this.addEventListener(evt,jQhandler,false);//<-- passes its handler by reference
}
したがって、この使用適用のいずれかを実行できます。これには、-あなたの場合-さらに別の anon が必要です。関数オブジェクトを作成するか、関数を直接 jQuery にコールバックとして渡します。後者ははるかに効率的です。冗長性が低く、必要な関数オブジェクトも少なくなります。
これが要するに、@RoryMcCrossan が正しい理由であり、JS が世界で最も誤解されている言語であると考える人もいる理由です。JS を使用する大部分の人々は、JS がコンテキストを決定する方法について本当に知りません。
補足として: ECMA5 では、.bind
メソッドを使用して関数をコンテキストにバインドできますが、それではトピックから大きく外れてしまいます...