2007-06-20

新手入门:理解JavaScript中函数的使用

来源: 本站收集整理 作者:佚名 评论 0 条
 

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指针指向的是obj1

}

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


共5页: 上一页 [1] [2] [3] [4] 5 下一页

(本文仅表明作者个人观点,不代表本站及其管理员立场.) 推荐 收藏 投稿 打印 返回 关闭
上一篇:Ajax技术的安全问题不容忽视  
下一篇:用javascript实现select的美化
    评论加载中…

网站首页  -  网站地图 -   站长论坛  -  网站投稿  -    -  网站管理
Copyright © 2008 芜湖站长站 All Rights Reserved 皖ICP备07500611号