如何在jquery中的未命名函数上使用.call()?

时间:2012-09-02 15:35:37

标签: javascript jquery function

我们假设我有按钮#click

假设我按如下方式绑定点击事件:

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

但我希望this引用其他一些元素,让我们说#ahref

如果它是一个命名函数,我只想按名称引用它:

foo.call('#ahref');

如果函数是内联调用而没有名字,我怎么能使用.call()

4 个答案:

答案 0 :(得分:4)

您可以使用proxy功能更改上下文:

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

答案 1 :(得分:2)

你不能强制jQuery使用除{jQuery'之外的任何其他值的this值来调用该函数。也就是说,您可以使用this向jQuery传递一个函数,该函数使用您预定的.bind()调用您的函数:

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

Function原型上的.bind()方法返回一个函数,该函数使用您传递的对象this调用原始函数(您的匿名事件处理程序)。它在较新的浏览器中,并且有一个shim at the Mozilla documentation site.

编辑 - 或者看看@dfsq的回答涉及jQuery本身的类似$.proxy()函数。

答案 2 :(得分:1)

也许我错过了什么,但是什么阻止你直接访问其他元素?

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

答案 3 :(得分:0)

不是100%肯定你所追求的是什么,但你可以像这样绑定上下文:

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