我正在做绑定的一些练习,我有一个愚蠢的问题关于jQuery的点击功能。为什么当我传入一个方法来点击时,'this'指向点击被触发的jquery对象,但是当我传入一个匿名函数时,这不会发生?我明白,如果'this'引用了jquery对象,那么我们需要使用bind,但不明白为什么'this'会改变。为什么'this'在jQuery对象在xxx.click事件中被调用时引用?
var test = {
data: 'Hello World',
getData: function() {
console.log(this.data);
}
};
//Base case - calling a method on an object
test.getData();
//test 1 -> doesn't work
$('#test1').click(test.getData);
//test2 -> works
$('#test2').click(test.getData.bind(test));
//test3 -> works
$('#test3').click(function(event) {
test.getData();
});
从技术上讲,'this'不绑定到jQuery对象,而是绑定到底层的DOM元素。 – 2014-09-04 14:52:49
因为这就是'这个'的作用。通过MDN文档了解更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this – 2014-09-04 14:57:48
jQuery将'this'明确地映射到适合您的元素。即使您使用事件委托并将click事件绑定到了'document',jQuery也会将'this'更改为它所委派的元素。 – Blazemonger 2014-09-04 15:00:27