使用';这';带jQuery的关键字
作为jQuery新手,我对使用这个关键字的不同上下文感到有些困惑。有时它引用DOM元素,例如this.id,有时它引用jQuery对象,例如$(this.val() 这很有帮助,但我想知道你如何向新手解释这一区别。这种差异严格来说是jQuery问题还是所有Javascript的共同问题 感谢所有到目前为止的回复-太棒了,我明天会选择一个答案。下面是我后来看到的另一篇博文,也很有帮助: 有时它引用jQuery对象,例如$(this).val()使用';这';带jQuery的关键字,jquery,Jquery,作为jQuery新手,我对使用这个关键字的不同上下文感到有些困惑。有时它引用DOM元素,例如this.id,有时它引用jQuery对象,例如$(this.val() 这很有帮助,但我想知道你如何向新手解释这一区别。这种差异严格来说是jQuery问题还是所有Javascript的共同问题 感谢所有到目前为止的回复-太棒了,我明天会选择一个答案。下面是我后来看到的另一篇博文,也很有帮助: 有时它引用jQuery对象,例如$(this).val() 这这里指的是DOM元素;$()函数调用将DOM元素包
这
这里指的是DOM元素;$()函数调用将DOM元素包装到jQuery对象中。对于jQuery事件回调,这个
将(几乎?)总是引用DOM元素。编写扩展jQuery的函数时,可以使用$('select').myfunc()调用该函数,此
将引用jQuery对象
一般来说,在JavaScript中,
当函数被作为对象的属性调用(方法调用)时,此
适用。因此,考虑到功能:
function foo() {
doSomethingWith(this);
}
var obj1 = {'foo': foo};
var obj2 = {};
obj2.myFoo = foo;
obj1.foo(); // calls function foo(), with 'this' set to obj1
obj2.myFoo(); // calls function foo(), with 'this' set to obj2
foo(); // calls function foo(), with 'this' set to the global object
// (which, in a browser, is the window object)
foo.apply(new Date()); // calls foo(), with 'this' set to a Date object
因此,在Javascript中,“this”在函数中所指对象的类型更多地取决于函数的调用方式,而不是函数的实际定义。我认为,如果你不仔细阅读,Remy Sharp的文章会令人困惑。
此
的含义永远不会改变。在您给出的示例中,this有两种用法。作为事件中的DOM元素:
$('a').click(function() {
alert(this.tagName);
});
并在事件中包装为jQuery对象:
$('a').click(function() {
alert($(this).val());
});
如果你仔细阅读上面的两个片段,你会注意到这个
永远不会改变意思。它总是引用DOM元素。区别在于如何使用它
在jQuery中,默认情况下,这个
引用触发事件的DOM元素(不是jQuery对象)。在上面的第二个代码片段中,它仍然是同一个DOM元素,只是通过在其周围环绕$()
将其包装在jQuery元素中。与jQuery构造函数的任何参数一样,将this
传递给构造函数会将其转换为jQuery对象
我认为,当Remy在与jQuery事件相同的文章中开始谈论jQuery插件时,就会出现混淆。jQuery插件是人们很少编写和经常使用的东西。编写jQuery插件时,您正在jQuery对象原型的上下文中工作。在本例中,您使用单词this
来指代您正在编写的插件。在正常的用例中,您不会经常编写插件,所以这是一个不太常见的场景。当不在插件的范围内时,您不能使用this
来引用jQuery对象
在JavaScript语言中,关键字
this
指的是JavaScript中对象的当前实例。在JavaScript原型中使用时,它指的是原型的实例。根据浏览器的不同,在使用非jquery事件模型时,此
还引用DOM元素。由于某些浏览器(Internet Explorer)不将此称为事件中的DOM元素,这使得处理事件变得困难。为了解决这个问题,jQuery执行了一些JavaScript魔术,总是让this
引用触发事件的DOM元素。这就是使用JavaScript框架而不是自己滚动的原因之一 不要忘记,如果您不确定任何给定上下文中的“this”是什么,您可以使用控制台在Firebug中诊断它:
console.log("This is: " + this)
如果您正在使用jQuery(正如您所提到的),您可以通过执行以下操作始终确保“this”仍然是jQuery对象:
this = $(this);
然后,回到控制台,通过将“this”的jQuery对象登录到Firebug中,您可以看到它是什么:
console.log("The jQuery This is: " + $(this))
最后,由于我们讨论的是jQuery,“this”在某些情况下会发生变化。例如,当您在动画、fadeIn或fadeOut之后执行回调时。在这种情况下,“这”是指收到效果的物品
只要记住,如果你不确定“这”是什么。。。问问萤火虫。萤火虫能看到一切。萤火虫无所不知。可能会帮助你得到答案。您可以调用函数并更改此
范围所指的对象
e、 g.类似于:
var me = {
type: "zombie"
,test: function() {$('#result').html(this.type)}
};
$.proxy( me.test(), me ); //prints 'zombie'