如何对jquery中的未命名函数执行.call()

How to .call() on the unnamed function in jquery?

本文关键字:执行 函数 call 未命名 jquery      更新时间:2023-09-26

假设我有按钮#click

假设我将点击事件绑定如下:

$('#click').click(function(){
   alert('own you'+'whatever'+$(this).attr('href'));
});

但我希望this指代其他元素,比如#ahref

如果它是一个命名函数,我会简单地引用它的名称:

foo.call('#ahref');

但是,如果函数是内联调用的并且没有名称,我如何使用.call()

您可以使用proxy函数来更改上下文:

$('#click').click($.proxy(function() {
    alert('own you'+'whatever'+$(this).attr('href'));
}, $('#ahref')));

您不能强制jQuery调用this值不是jQuery所希望的值的函数。也就是说,您可以通过使用.bind():向jQuery传递一个函数,该函数调用具有预定this的函数

$('#click').click(function() {
  // whatever
}.bind(someObject));

Function原型上的.bind()方法返回一个函数,该函数使用传递为this的对象调用原始函数(匿名事件处理程序)。它在更新的浏览器中,Mozilla文档网站上有一个填充程序。

编辑—或者参见@dfsq的答案,该答案涉及jQuery本身的类似$.proxy()函数。

也许我遗漏了什么,但是什么阻止了您直接访问另一个元素?

$('#click').click(function(){
   alert('own you'+'whatever' + $('#ahref').attr('href'));
});

不能100%确定你想要什么,但你可以像这样绑定上下文:

$('#click').click(function(){
   alert('own you'+'whatever'+this.attr('href'));
}.bind($('#ahref')));