Javascript 在jQuery中将函数引用作为事件处理程序传递
我试图在jQuery中将函数引用作为事件处理程序传递。我想用一个简单的例子,如下面Javascript 在jQuery中将函数引用作为事件处理程序传递,javascript,jquery,Javascript,Jquery,我试图在jQuery中将函数引用作为事件处理程序传递。我想用一个简单的例子,如下面 $("a").click(console.debug.bind(undefined,this)); …而不是显式传递整个函数体: $("a").click(function() { console.debug(this) }); 此外,我希望在我的速记函数中访问jQuery选择的元素(并将它们作为参数传递)。换句话说:我希望有一个$(“a”)的结果作为此(或任何其他将检索结果的代码) 到目前为止
$("a").click(console.debug.bind(undefined,this));
…而不是显式传递整个函数体:
$("a").click(function() {
console.debug(this)
});
此外,我希望在我的速记函数中访问jQuery选择的元素(并将它们作为参数传递)。换句话说:我希望有一个$(“a”)
的结果作为此
(或任何其他将检索结果的代码)
到目前为止,我已经尝试:
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
这是小提琴:
我的问题是:
中,此成为“合并”窗口和jQuery.Event对象
undefined
基本上没有传递第一个参数
第二个参数和其他参数作为第一个值传递到函数中
还请注意,此
在全局范围内时,指的是窗口
对象
所以这里,b
console.debug.bind(undefined,this);
与…相同
function(){ console.debug(window); }
…因为您正在将此
(即窗口
)作为第一个参数传递给调试
默认情况下,将事件附加到元素时,此
将自动指向捕获事件的元素,因此甚至不需要绑定,这就是为什么$(“a”)。单击(a)代码>在不使用绑定的情况下工作。的第一个参数是用于此
的新上下文。通过传递undefined
基本上没有传递第一个参数
第二个参数和其他参数作为第一个值传递到函数中
还请注意,此
在全局范围内时,指的是窗口
对象
所以这里,b
console.debug.bind(undefined,this);
与…相同
function(){ console.debug(window); }
…因为您正在将此
(即窗口
)作为第一个参数传递给调试
默认情况下,将事件附加到元素时,此
将自动指向捕获事件的元素,因此甚至不需要绑定,这就是为什么$(“a”)。单击(a)代码>在不使用绑定的情况下工作。
- 你已经在用它了,不是吗?:)这是有限的,但它在你自己的小提琴作品
- jQuery将把事件对象传递给指定的函数。您可以使用函数bind将其作为参数传递(您已经有了这个功能)
- 没有。看看发生了什么:
单击处理程序函数-事件对象。您将console.debug.bind(未定义,this)
作为处理函数传递,因此jQuery将使用一个参数调用它
然后,当您在函数中绑定为“this”对象并发送一个额外的参数-“this”时,这是此范围内的一个窗口,因为您是在最高级别绑定的
因此,当实际单击发生时,jQuery使用两个参数调用console.debug—在click()期间绑定的窗口对象和始终传递给click处理程序的jQuery事件。可以接受和显示多个对象,这正是您在开发者控制台中看到的。
- 你已经在用它了,不是吗?:)这是有限的,但它在你自己的小提琴作品
- jQuery将把事件对象传递给指定的函数。您可以使用函数bind将其作为参数传递(您已经有了这个功能)
- 没有。看看发生了什么:
单击处理程序函数-事件对象。您将console.debug.bind(未定义,this)
作为处理函数传递,因此jQuery将使用一个参数调用它
然后,当您在函数中绑定为“this”对象并发送一个额外的参数-“this”时,这是此范围内的一个窗口,因为您是在最高级别绑定的
因此,当实际单击发生时,jQuery使用两个参数调用console.debug—在click()期间绑定的窗口对象和始终传递给click处理程序的jQuery事件。可以接受和显示多个对象,这正是您在开发人员控制台中看到的。传递未定义的对象与不传递的对象相同。它没有像这样使用未定义。另外,它只是将窗口传递给debug方法,this
不会传递给debug。当然,“this”是传递的-这就是他在控制台中接收两个对象的原因。关于undefined的注释只是语言上的一句空话:)由于函数没有“this”,它肯定会觉得它实际上使用了“undefined”作为“this”:)传递undefined与不传递是一样的。它没有像这样使用未定义。另外,它只是将窗口传递给debug方法,this
不会传递给debug。当然,“this”是传递的-这就是他在控制台中接收两个对象的原因。关于undefined的注释只是一个语言上的abracadabra:)因为函数没有“this”,它肯定会感觉它实际上使用了“undefined”作为“this”:)