0

假设我有以下函数是函数的回调(换句话说,“this”是指回调传递的内容):

afunction("onclick", callbackfunction)
function callbackfunction() {
   console.log(this); // This refers to item clicked
}

我不想只引用单击的项目,而是要包含对父对象的引用。通常我会使用:

afunction("onclick", $.proxy(callbackfunction, this))

然而,这使得我无法再点击该项目。有没有一种方法可以保留两者,以便我可以在回调函数中访问“代理”“this”和单击“this”的项目?

4

2 回答 2

1

为什么不

var self = this;
afunction("onclick", function(evt){
    var clicked = this;
    anotherfunction(clicked,self);
});
于 2013-06-30T01:38:52.200 回答
0

由于您不能有两种含义this,因此需要将一种含义作为参数传递。

使用的一种可能性是作为值$.proxy传递。这将导致不受约束。当事件发生时,该值将是调用者设置的预期值。nullthisArgthisthis

然后,您可以将封闭this作为参数传递给函数的第一个参数。

afunction("onclick", $.proxy(callbackfunction, null, this));

这种传递功能null需要 jQuery 1.9 或更高版本。

$.proxy文档

从 jQuery 1.9开始,当 context isnull或被undefined代理的函数将使用与调用代理相同的 this 对象来调用。这允许$.proxy()用于在不更改上下文的情况下部分应用函数的参数。

于 2013-06-30T01:39:25.463 回答