jQueryでイベントハンドラとして関数参照を渡そうとしています。私はむしろ、明示的に全体の機能体を渡すよりも... ...以下の簡単な例のように速記を使用する関数リファレンスをjQueryのイベントハンドラとして渡します
$("a").click(console.debug.bind(undefined,this));
をしたいと思います:
$("a").click(function() {
console.debug(this)
});
また、私は要素にアクセスしたいと思います私の短縮形の関数でjQueryによって選択され(パラメータとして渡します)。言い換えれば、$("a")
という結果をthis
(または結果を取得する他のコード)とすることを期待しています。
これまでのところ、私が試した:ここ
var a = function() {
console.debug(this);
};
var b = console.debug.bind(undefined,this);
$("a").click(function() {console.debug(this)}); // prints link
$("a").click(a); // prints link
b(); // prints Window
$("a").click(console.debug.bind(undefined,this)); // prints Window & jQuery.Event
はフィドルです: https://jsfiddle.net/hbqw2z93/1/
私の質問は以下のとおりです。
- は、それがこのような構造を使用して、すべての要件を満たすことは可能です上記のように1行だけ追加変数を定義しなくてもかまいません。
- 上記の方法でjQueryの選択結果にアクセスできますか?
- なぜ特定のスコープで
this
が 'merged' WindowとjQuery.Eventオブジェクトになるのですか?
渡されていないものと同じです。これはundefinedを使用しません。また、ウィンドウをデバッグメソッドに渡すだけで、 'this'はデバッグに渡されません。 –
もちろん 'this'が渡されます。そのため、彼はコンソールに2つのオブジェクトを受け取りました。未定義に関するコメントは単なる言語的なアブラカダブラです:)この関数は 'this'を持たないので、実際には 'this'として 'undefined'を使用しているような気がします:)) –