这
在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(函数(){返回this.className;});
jQuery使用的另一个地方这
在上的回调中jQuery.each公司
:
var a=[“一”,“二”,“三”];jQuery.each(a,function()){警报(此);});
…它会提示“一”,然后是“二”,最后是“三”。正如你所见,这是一个完全不同的用法这
.
(令人困惑的是,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公司
以任何方式与对象
,这很好:
var 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的严格模式中的对象:
(函数(){“使用严格”;//严格模式测试(“直接”);测试调用(5,“with 5”);test.call(true,“with true”);test.call(“hi”,“with”hi“);功能测试(msg){console.log(“[严格]”+消息+“;typeof this=”+类型of this);}})();
输出:
【严格】直接;此类型=未定义【严格】5分;此类型=数字【严格】为true;typeofthis=布尔型[严格]带“hi”;typeof this=字符串
而在松散模式下,所有这些都会说类型=对象
;实时副本.