this指针是面向对象程序设计中的一项重要概念,它表示当前运行的对象。在实现对象的方法时,可使用this指针来得到该对象自身的引用。
和其余面向对象的语言不一样,JavaScript中的this指针是一个动态的变量,一个方法内的this指针并非始终指向定义该方法的对象的,在上一节讲函数的apply和call方法时已经有过这样的例子。为了方便理解,再来看下面的例子:
如下是引用片断:
<script language="JavaScript" type="text/javascript">
<!--
//建立两个空对象
var obj1=new Object();
var obj2=new Object();
//给两个对象都添加属性p,并分别等于1和2
obj1.p=1;
obj2.p=2;
//给obj1添加方法,用于显示p的值
obj1.getP=function(){
alert(this.p); //表面上this指针指向的是obj1
}
//调用obj1的getP方法
obj1.getP();
//使obj2的getP方法等于obj1的getP方法
obj2.getP=obj1.getP;
//调用obj2的getP方法
obj2.getP();
//-->
</script>
从代码的执行结果看,分别弹出对话框显示1和2。因而可知,getP函数仅定义了一次,在不一样的场合运行,显示了不一样的运行结果,这是有this指针的变化所决定的。在obj1的getP方法中,this就指向了obj1对象,而在obj2的getP方法中,this就指向了obj2对象,并经过this指针引用到了两个对象都具备的属性p。
因而可知,JavaScript中的this指针是一个动态变化的变量,它代表了当前运行该函数的对象。由this指针的性质,也能够更好的理解JavaScript中对象的本质:一个对象就是由一个或多个属性(方法)组成的集合。每一个集合元素不是仅能属于一个集合,而是能够动态的属于多个集合。这样,一个方法(集合元素)由谁调用,this指针就指向谁。实际上,前面介绍的apply方法和call方法都是经过强制改变this指针的值来实现的,使this指针指向参数所指定的对象,从而达到将一个对象的方法做为另外一个对象的方法运行。
每一个对象集合的元素(即属性或方法)也是一个独立的部分,全局函数和做为一个对象方法定义的函数之间没有任何区别,由于能够把全局函数和变量看做为window对象的方法和属性。也可使用new操做符来操做一个对象的方法来返回一个对象,这样一个对象的方法也就能够定义为类的形式,其中的this指针则会指向新建立的对象。在后面能够看到,这时对象名能够起到一个命名空间的做用,这是使用JavaScript进行面向对象程序设计的一个技巧。例如:
如下是引用片断:
var namespace1=new Object();
namespace1.class1=function(){
//初始化对象的代码
}
var obj1=new namespace1.class1();
这里就能够把namespace1当作一个命名空间。
因为对象属性(方法)的动态变化特性,一个对象的两个属性(方法)之间的互相引用,必需要经过this指针,而其余语言中,this关键字是能够省略的。如上面的例子中:
如下是引用片断:
obj1.getP=function(){
alert(this.p); //表面上this指针指向的是obj1javascript