在jQuery中使用’this’关键字的上下文

作为jQuery新手,我对使用this关键字的不同上下文感到困惑.有时它指的是DOM元素,例如this.id,有时它指的是一个jQuery对象,例如$(本).VAL().

Remy Sharp’s blog post是有帮助的,但我想知道你将如何解释新手的差异.严格区别是jQuery问题或所有Javascript的共同点?

感谢到目前为止的所有回复 – 很棒的东西,明天我会回答.这是我后来遇到的另一篇博文,也很有帮助:What is this? by Mike Alsup.

解决方法

如果你不仔细阅读,我认为雷米夏普的帖子会令人困惑.这种意义永远不会改变.在你给出的例子中,有2个用途.作为事件中的DOM元素:
$('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框架而不是自己编辑的(很多)原因之一.

相关文章

jQuery插件的种类 1、封装对象方法 这种插件是将对象方法封装起来,用于对通过选择器获取的jQuery对象进...
扩展jQuery插件和方法的作用是非常强大的,它可以节省大量开发时间。 入门 编写一个jQuery插件开始于给...
最近项目中需要实现3D图片层叠旋转木马切换的效果,于是用到了jquery.roundabout.js。 兼容性如图: ht...
一、什么是deferred对象? 开发网站的过程中,我们经常遇到某些耗时很长的javascript操作。其中,既有异...
AMD 模块 AMD(异步模块定义,Asynchronous Module Definition)格式总体的目标是为现在的开发者提供一...