我与this
保留密钥混淆,导致错误。这是一个导致错误的示例代码。
var sample = {
init: function() {
this.sampleFunction0();
this.sampleFunction1();
},
sampleFunction0 : function(){
var something0, something1, something2;
something0 = this.sampleFunction2(); // works, there is no ambiguity whit 'this'
jQuery('#list li').click(function(){
something1 = this.sampleFunction2(); // ambiguity: not works, but sample.sampleFunction2(); works
something1 = sample.sampleFunction2(); // it´s works
something2 = $(this).text(); // list item val
console.log(something0) // something
console.log(something1); // something : using sample.sampleFunction2();
console.log(something2); // item val
});
},
sampleFunction1 : function(){
return 'someting';
},
sampleFunction2 : function(){
return 'something';
}
}
jQuery(document).ready(function(){
sample.init();
});
我不知道使用sample.sampleFunction2();
代替this.sampleFunction2();
答案 0 :(得分:2)
从你的问题我想你可能知道这一点,但是:在事件处理程序中,this
指的是你挂钩事件的元素,这当然是为什么this.sampleFunction2()
不起作用的原因。因此,this
将是被点击的li
元素 - 这通常非常方便。
在您的具体情况下,使用sample
而不是this
是可以的,因为您的sample
对象是一次性的,因此不会超过一个。是的,只需使用sample.sampleFunction2();
代替this.sampleFunction2();
。
如果可能有多个(通过构造函数创建的东西等),在这种情况下做的典型事情(没有双关语)是在闭包中定义局部变量(你的函数你'重新进入click
)可以关闭:
sampleFunction0 : function(){
var something0, something1, something2, self = this; // <==== CHANGE
something0 = this.sampleFunction2(); // works, there is no ambiguity whit 'this'
jQuery('#list li').click(function(){
something1 = self.sampleFunction2(); // <==== CHANGE
something2 = $(this).text(); // list item val
});
},
有时使用jQuery的proxy
函数是有用的,但在这种情况下不是这样,因为A)你已经定义了一个闭包,而B)你正在使用其他的this
。当你试图绑定一个你在其他地方定义的函数时,proxy
非常有用,当你需要this
来获得一个特定的值而不是通常的值时。{/ p>
更多阅读:
答案 1 :(得分:0)
我相信,$ .proxy()可以帮助您解决此问题: http://api.jquery.com/jQuery.proxy/
答案 2 :(得分:0)
当你被攻击时,jQuery函数this
可以有不同的含义。在这种情况下:
jQuery('#list li').click(function(){
这是指被点击的元素,所以
this.sampleFunction2();
尝试访问被点击元素的方法。您应该复制“this”
var that = this;
jQuery('#list li').click(function(){
something1 = that.sampleFunction2(); /
something2 = $(this).text(); // list item val
console.log(something0) // something
console.log(something1); // something : using sample.sampleFunction2();
console.log(something2); // item val
});
答案 3 :(得分:0)
click()
中的上下文是单击的元素,因此这指的是接收到click事件的元素。您可以使用sample.sampleFunction2()