this
this是javascript的一个关键字,随着函数使用场合不同,this的值会发生变化。但是总有一个原则,那就是this指的是调用函数的那个对象。
一、定义
1、this是函数内部的一个特殊对象(或this引用)--它引用的是函数据以执行的环境对象。
2、this引用是一种在JavaScript的代码中随时都可以使用的只读变量。 this引用 引用(指向)的是一个对象,它有着会根据代码上下文语境自动改变其引用对象的特性。它的引用规则如下:
• 在最外层代码中,this引用 引用的是全局对象。
• 在函数内,this引用根据函数调用的方式的不同而有所不同。如下
1)构造函数的调用--this引用 引用的是所生成的对象
2)方法调用--this引用 引用的是接收方对象
3)apply或call调用--this引用 引用的是有apply或call的参数指定的对象
4)其他方式的调用--this引用 引用的是全局对象
二、根据以上所述及网上的相关资料,this对象(引用)的使用情况总结如下:
JavaScript是动态语言,this关键字在执行的时候才能确定是谁。所以this永远指向调用者,即对“调用对象”的引用。简单点说就是调用的方法属于哪个对象,this就指向那个对象。根据函数调用方式的不同,this可以 指向全局对象,当前对象,或其他任意对象。
1、全局函数调用,全局函数中的this会指向全局对象window。(函数调用模式)
//代码清单1<script type="text/javascript">var message = "this in window"; //这一句写在函数外面和里面是一样效果function func() {if(this == window){alert("this == window"); alert(message);this.methodA = function() {alert("I'm a function");}}}func(); //如果不调用func方法,则里面定义的属性或方法会取不到 methodA();</script>
func()的调用结果为this == window, this in window
methodA()的调用结果为I'm a function
2、构造函数调用,即使用new的方式实例化一个对象,this会指向通过构造函数生成的对象。(构造器调用模式)
代码清单2
<script type="text/javascript">function Func() {if (this == window) {alert("this == window");}else {alert("this != window");}this.fieldA = "I'm a field";alert(this);}var obj = new Func();alert(obj.fieldA); //this指向的是对象obj</script>
3、对象方法的调用,this指向当前对象。任何函数,只要该函数被当做一个对象的方法使用或赋值时,该函数内部的this都是对该对象本身的引用。也可理解为this写在一个普通对象中,this指向的就是对象本身。(方法调用模式)
新闻热点
疑难解答
图片精选