55

在jquery中,什么是意味着什么时候使用?

5

5个答案5

重置为默认值
96

在JavaScript中是非常特殊和强大的。它可以意味着任何事情。我报道了一些在这里在这里,但确实值得找到一个关于JavaScript的好教程并花点时间学习。

让我们先看看jQuery对它的使用,然后在JavaScript中更全面地讨论它(稍微)。

在jQuery中,特别是

在用jQuery编写的代码中, 通常指作为被调用函数主题的DOM元素(例如,在事件回调中)。

示例jQuery事件回调(什么包含在中这个.绑定文档):

$(“div”).点击(function(){//这里,`this`将是被单击的div的DOM元素,//例如,您可以设置其前景色:this.style.color=“红色”;//您经常会看到$(this)用于将jQuery对象包装在//元素,因为jQuery使很多事情变得简单多了。你可能会//隐藏元素,例如:$(this).hide();});

类似地,作用于当前jQuery选择器匹配的所有元素的各种jQuery函数可以选择性地接受函数,当调用该函数时,也是有问题的DOM元素-例如html格式函数允许:

//查找`foo`元素内的所有div,并设置//将其内容转换为CSS类名//(好吧,这是一个骗人的例子)$(“#foo div”).html(函数(){return this.className;});

jQuery使用的另一个地方在上的回调中jQuery.each公司:

var a=[“一”,“二”,“三”];jQuery.each(a,function()){警报(this);});

…它会提示“一”,然后是“二”,最后是“三”。正如你所见,这是一个完全不同的用法.

(令人困惑的是,jQuery有两个函数每个,上面的一个位于jQuery/$函数本身,并且总是这样调用[jQuery.each(…)每个(…)美元]和jQuery上的另一个实例[objects]而不是jQuery/$函数iself。这些是文件对于另一个,我不在这个答案中讨论另一个,因为它使用同样的方式html格式和事件回调,我想显示一个不同的使用通过jQuery。)

一般使用JavaScript

指的是一个对象。 更新:在ES5的严格模式下,情况不再是这样了,可以有任何值。的价值在任何给定的函数中,调用由如何调用函数(不是在定义函数的地方,比如在C#或Java等语言中)。最常见的设置方法调用函数时,是通过对象上的属性调用函数:

变量obj={};obj.foo=函数(){警报(this.firstName);};obj.firstName=“弗雷德”;obj.foo();//提醒“Fred”

因为我们打过电话foo公司通过上的属性对象,已设置为对象在通话期间。但不要给人这样的印象foo公司以任何方式与对象,这很好:

变量obj={};obj.foo=函数(){警报(this.firstName);};obj.firstName=“弗雷德”;obj.foo();//提醒“Fred”var differentObj={};differentObj.firstName=“巴尼”;differentObj.bar=obj.foo;//不是“调用”它,只是获取它的引用differentObj.bar();//提醒“Barney”

事实上,foo公司任何对象:

var f=对象foo;//不是“调用”它,只是获取对它的引用f();//可能警报“未定义”

在那里,因为我们没有打电话(f)通过对象属性,未显式设置。什么时候?未显式设置,则默认为全局对象(即窗口在浏览器中)。窗口可能没有财产名字,所以我们在警报中得到了“未定义”。

还有其他方法可以调用函数并设置是:通过使用函数的.呼叫.应用功能:

功能foo(arg1、arg2){警报(this.firstName);警报(arg1);警报(arg2);}var obj={firstName:“Wilma”};foo.调用(obj,42,27);//警报“Wilma”、“42”和“27”

呼叫给它的第一个参数,然后把给它的任何其他参数传递给它调用的函数。

应用执行完全相同的操作,但将函数的参数作为数组而不是单独提供给它:

var obj={firstName:“Wilma”};var a=[42,27];foo.apply(obj,a);//警报“Wilma”、“42”和“27”//^--注意,这是一个参数,是`foo的参数数组`

不过,还有很多东西需要探索在JavaScript中。这个概念很强大,如果你习惯了其他一些语言的使用方式(如果你习惯其他一些语言,则不会),有点欺骗性,值得了解。

以下是一些例子不引用ES5严格模式中的对象:

(函数(){“使用严格”;//严格模式测试(“直接”);test.call(5,“带5”);test.call(true,“with true”);test.call(“hi”,“with”hi“);功能测试(msg){console.log(“[严格]”+消息+“;typeof this=”+类型of this);}})();

输出:

[严格]直接;此类型=未定义【严格】5分;此类型=数字【严格】为true;typeofthis=布尔型[严格]带“hi”;typeof this=字符串

而在松散模式下,所有这些都会说类型=对象;实时副本.

6
  • 0反对票这是我如何解释的,简单地说:这是指调用函数的对象。因为differentObj调用了foo(),所以它将指向different Obj。因为f是在全局范围内定义的,所以它是窗口对象的方法,所以它指向窗口。由于窗口对象没有属性firstName,this.firstName返回未定义的Fun事实:在全局范围(顶层/级别)中定义的任何内容都将成为窗口对象的属性(全局范围=窗口对象)。 2017年6月28日18:41
  • 2
    @莱恩等待28:“这是指调用函数的对象”不,它不是。对象不调用方法,代码调用方法;在JavaScript中,代码只是松散地链接到对象。当代码调用方法时,它设置无论是显式的还是隐式的,都可以是它喜欢的——在严格模式下,它甚至可能不是对象引用,也可能是原始值。 2017年6月30日13:57
  • 从技术上讲,克劳德是的。但为了以人们能够理解的方式解释它,我说的是对象。但感谢您添加抽象细节。“this”可以从字面上指代任何东西。 2017年6月30日15:05
  • @T。J.Crowder我可以添加编辑代码段并将其放入堆栈代码段吗?
    – 布雷克
    2018年4月19日4:40
  • @brk:你的意思是要编辑答案,将代码块转换为可运行的代码段吗?如果是这样:加油,谢谢! 2018年4月19日6:50
6

这个关键字

在JavaScript中,名为this的对象是“拥有”JavaScript代码的对象。

在函数中使用时,它的值是“拥有”函数的对象。在对象中使用时,它的值是对象本身。对象构造函数中的this关键字没有值。它只是新对象的替代品。当构造函数用于创建对象时,此值将成为新对象。

请注意,这不是一个变量。它是一个关键字。您无法更改此的值。

4

下面是我如何解释的,简单地说:

指的是对象 那个叫这个功能.

所以看看这个:

变量foo={名称:“foo”,日志:函数(){console.log(this.name);}}无功条形图={名称:“bar”}bar.log=foo.log;bar.log();

bar对象将foo的log方法的引用存储到它自己的log属性中为自己现在,当bar调用其log方法时,它将指向bar,因为该方法是由bar对象调用的。

这适用于任何其他对象,甚至窗口对象。如果你通过全局范围调用一个函数,它将指向窗口对象。

通过使用函数的绑定或调用方法,可以显式定义对象将在执行过程中引用。

有趣的事实:在全球范围,它是顶层/级别,成为窗口对象(全局范围=窗口对象)。

1

“javascript this”的谷歌搜索结果排名靠前:http://www.quirksmode.org/js/this.html

编辑:我认为关键的一句话是:

在JavaScript中,“this”总是指我们正在执行的函数的“所有者”,或者更确切地说,是指函数所属的对象

Quirksmode(通常是*)非常棒,值得详细阅读整篇文章。

*显然,这种说法不一定正确,请参阅下面的T.J.克劳德评论。

5
  • 不在javascript中。。这是jquery中的。。无论如何,谢谢!:D类
    – JCm公司
    2010年11月16日16:00
  • 5
    jQuery(jQuery)用Javascript编写。任何jQuery代码也是Javascript
    – 加雷思
    2010年11月16日16:05
  • “在JavaScript中,this”总是指我们正在执行的函数的“所有者”,或者更确切地说,是指函数所属的对象哇,我希望文章的其余部分比那更好。这句话延续了一个不信任的神话,没有达到quirksmode通常的标准。 2010年11月16日16:10
  • @T。J.克劳德,你能解释这个神话吗?或者链接到更多关于你的信息吗? 2016年10月13日15:32
  • @DanielSokolowski:我的博客上有两篇帖子:神话般的方法你必须记住. :-) 2016年10月13日16:18
0

关键字this充当占位符,当Java Script中实际使用该方法时,它将引用调用该方法的任何对象

不是你想要的答案吗?浏览标记的其他问题问自己的问题.