你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 编程语言
JavaScript中函数与对象的解析(六)
 

7 JavaScript中的this指针

this指针是面向对象程序设计中的一项重要概念,它表示当前运行的对象。在实现对象的方法时,可以使用this指针来获得该对象自身的引用。  

和其他面向对象的语言不同,JS中的this指针是一个动态的变量,一个方法内的this指针并不是始终指向定义该方法的对象,在前面讲函数的applycall方法时已经有过这样的例子。为了方便理解,再来看下面的示例:

script language="JavaScript" type="text/javascript"  

//!--  

//创建两个空对象 

var obj1=new Object();  

var obj2=new Object();  

//给两个对象都添加属性p,并分别等于12 

obj1.p=1;  

obj2.p=2;  

//obj1添加方法,用于显示p的值 

obj1.getP=function(){  

      alert(this.p); //表面上this指针指向的是obj1 

}  

//调用obj1getP方法 

obj1.getP();  

//使obj2getP方法等于obj1getP方法 

obj2.getP=obj1.getP;  

//调用obj2getP方法 

obj2.getP();  

//--

/script

从代码的执行结果看,分别弹出对话框显示12。由此可见,getP函数仅定义了一次,在不同的场合运行,显示了不同的运行结果,这是由this指针的变化所决定的。在obj1getP方法中,this就指向了obj1对象;而在obj2getP方法中,this就指向了obj2对象,并通过this指针引用到了两个对象都具有的属性p  

由此可见,JavaScript中的this指针是一个动态变化的变量,它表明了当前运行该函数的对象。由this指针的性质,也可以更好地理解JS中对象的本质:一个对象就是由一个或多个属性(方法)组成的集合。每个集合元素不是仅属于一个集合,而是可以动态地属于多个集合。这样,一个方法(集合元素)由谁调用,this指针就指向谁。实际上,前面介绍的apply方法和call方法都是通过强制改变this指针的值来实现的,使this指针指向参数所指定的对象,从而达到将一个对象的方法作为另一个对象的方法运行。  

每个对象集合的元素(即属性或方法)也是一个独立的部分,全局函数和作为一个对象方法定义的函数之间没有任何区别,因为可以把全局函数和变量看作为Window对象的方法和属性。也可以使用new操作符来操作一个对象的方法来返回一个对象,这样一个对象的方法也就可以定义为类的形式,其中this指针则会指向新创建的对象。在后面可以看到,这时对象名可以起到一个命名空间的作用,这是使用JS进行面向对象程序设计的一个技巧。

var namespace1=new Object();  

namespace1.class1=function(){  

     //初始化对象的代码 

}  

var obj1=new namespace1.class1();

这里就可以把namespace1看成一个命名空间。  

由于对象属性(方法)的动态变化特性,一个对象的两个属性(方法)之间的互相引用,必须要通过this指针,而其他语言中,this关键字是可以省略的。

obj1.getP=function(){  

      alert(this.p); //表面上this指针指向的是obj1 

}

这里的this关键字是不可省略的,即不能写成alert(p)的形式。这将使得getP函数去引用上下文环境中的p变量,而不是obj1的属性。

8 结语

可以看出,JavaScript将函数作为一个数据类型来处理,既是对象,定义的函数名也是一个变量,这给JavaScript的函数带来一些新的特性,增加了编程的灵活性。

 

参考文献

 

1]祝红涛.Ajax从入门到精通.电子工业出版社,2008.

2]褚法政.Ajax开发技术原理与实践教程,2007.

3JavaScript 参考教程.http://www.iselong.com/online/ebooks/javascript/.

  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089