Remy Sharp’s blog post是有帮助的,但我想知道你将如何解释新手的差异.严格区别是jQuery问题或所有Javascript的共同点?
感谢到目前为止的所有回复 – 很棒的东西,明天我会回答.这是我后来遇到的另一篇博文,也很有帮助:What is this? by Mike Alsup.
解决方法
$('a').click(function() { alert(this.tagName); });
并在事件中包装为jQuery对象:
$('a').click(function() { alert($(this).val()); });
如果您仔细阅读上面的2个片段,您会发现这永远不会改变含义.它总是指DOM元素.不同之处在于如何使用它.
在jQuery中,默认情况下,这是指触发事件的DOM元素(不是jQuery对象).在上面的第二个代码片段中,它仍然是相同的DOM元素,只是通过在它周围包装$()来包装在jQuery元素中.与jQuery构造函数的任何参数一样,将其传递给构造函数会将其转换为jQuery对象.
我认为当Remy在与jQuery事件相同的文章中开始讨论jQuery插件时会产生混淆. jQuery插件是人们很少编写和经常使用的东西.在编写jQuery插件时,您正在jQuery对象原型的上下文中工作.在这种情况下,您使用单词this来指代您正在编写的插件.在正常的用例中,您不会经常编写插件,因此这是一种不太常见的情况.当不在插件的范围内时,您不能使用它来引用jQuery对象.
在JavaScript语言中,关键字this指的是JavaScript中对象的当前实例.当在JavaScript原型中使用时,它引用原型的实例.根据浏览器的不同,在使用非jquery事件模型时,这也会引用DOM元素.因为某些浏览器(Internet Explorer)在事件中没有将其称为DOM元素,所以它使得处理事件变得困难.为了解决这个问题,jQuery执行一些JavaScript魔术,总是让它引用触发事件的DOM元素.这是使用JavaScript框架而不是自己编辑的(很多)原因之一.