如何在javascript中代理“this”的两个引用?

时间:2013-06-30 01:21:39

标签: javascript jquery

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

为什么不

var self = this;
afunction("onclick", function(evt){
    var clicked = this;
    anotherfunction(clicked,self);
});

答案 1 :(得分:0)

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

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

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

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

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

来自$.proxy docs

  

从jQuery 1.9 开始,当上下文为nullundefined时,将使用与调用代理相同的此对象调用代理函数。这允许$.proxy()用于部分应用函数的参数而不更改上下文。