假设我有以下函数是函数的回调(换句话说,“this”指的是回调传递的内容):
afunction("onclick", callbackfunction)
function callbackfunction() {
console.log(this); // This refers to item clicked
}
我想要包含对父对象的引用,而不是仅引用单击的项目。通常我会使用:
afunction("onclick", $.proxy(callbackfunction, this))
然而,这使我无法再点击该项目。有没有办法可以保留两者,以便我可以在回调函数中访问“代理”“这个”和项目点击“这个”?
答案 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 开始,当上下文为
null
或undefined
时,将使用与调用代理相同的此对象调用代理函数。这允许$.proxy()
用于部分应用函数的参数而不更改上下文。