Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用';这';带jQuery的关键字_Jquery - Fatal编程技术网

使用';这';带jQuery的关键字

使用';这';带jQuery的关键字,jquery,Jquery,作为jQuery新手,我对使用这个关键字的不同上下文感到有些困惑。有时它引用DOM元素,例如this.id,有时它引用jQuery对象,例如$(this.val() 这很有帮助,但我想知道你如何向新手解释这一区别。这种差异严格来说是jQuery问题还是所有Javascript的共同问题 感谢所有到目前为止的回复-太棒了,我明天会选择一个答案。下面是我后来看到的另一篇博文,也很有帮助: 有时它引用jQuery对象,例如$(this).val() 这这里指的是DOM元素;$()函数调用将DOM元素包

作为jQuery新手,我对使用这个关键字的不同上下文感到有些困惑。有时它引用DOM元素,例如this.id,有时它引用jQuery对象,例如$(this.val()

这很有帮助,但我想知道你如何向新手解释这一区别。这种差异严格来说是jQuery问题还是所有Javascript的共同问题

感谢所有到目前为止的回复-太棒了,我明天会选择一个答案。下面是我后来看到的另一篇博文,也很有帮助:

有时它引用jQuery对象,例如$(this).val()

这里指的是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'