Flyingis

Talking and thinking freely !
Flying in the world of GIS !
随笔 - 156, 文章 - 16, 评论 - 589, 引用 - 0
数据加载中……

JavaScript 中的对象(上)

    作者:Flyingis

    面向对象语言需要具备三种基本特征:继承(Inheritance)、多态 (Polymorphism) 、封装(Encapsulation and Aggregation)。和Java 、C++ 等语言一样,ECMAScript 被认为是面向对象的,因为它同时支持这些特征。
 
var obj = new Object();

    该语句创建了一个对象,当构造函数没有参数时,可以省略后面的括号。我们通常是通过对象的引用来进行对象操作,当一个对象的引用为null时,ECMAScript将启动垃圾回收程序删除该对象,释放内存。当一个对象存在多个引用时,需要将所有的引用设置为null来释放该对象所占用的空间。

早期绑定和动态绑定

    早期绑定是指在对象被实例化之前对象的属性和方法已经被定义,使得编译器或解释器能够提前编译机器码。Java和VB支持这种特性,但ECMAScript 并非强类型,不支持早期绑定。

    动态绑定是指编译器或解释器在运行时才知道该对象的具体类型,之前并不会检查,只会判断这些属性和方法是否得到该对象的支持。ECMAScript对所有的变量使用动态绑定。

对象类型

2.1  原始对象

    ECMA-262 定义不受主机环境影响的ECMAScript支持的任意对象为原始对象,简而言之,原始对象就是ECMA-262定义的引用类型,比较常用的有Object、Function、String、Boolean、Number、Array、Date。 

    Array

   
Array有许多常用的方法,很多和Java类似,在此不作介绍。需要注意的是,使用push()和pop()两个方法,可以将Array看作一个栈,遵循后进先出规则(LIFO)。使用shift()和push()两个方法,Array对象即可看作是一个队列,遵循后进后出的规则(LILO)。splice()方法非常有用,它轻松的实现了链表的一些基本功能,如删除数据项、插入数据、替换数据。

    Date

   
ECMAScript中的Date类是基于Java早期版本中的java.util.Date类的,它可以精确表示1970年1月1日(格林威治时间)前后285616年的任意时间。Date是少有的几个重写了toString()和valueOf()方法,并且两个方法并不相同的类。valueOf()通常表示精确到毫秒级的时间,toString()通常返回个性化的时间表示方法,例如相同的时间在不同浏览器下显示的效果可能不一样。

2.2  Build-in对象

    Build-in 对象除了具备原始对象的基本特性外,它在 ECMAScript 程序开始运行时就可以使用,因此可以说任何 Build-in 对象就是原始对象。目前 ECMA-262 只定义了两个 Build-in 对象: Global 和 Math 。

    Global

   
在ECMAScript里,没有函数可以单独存在,所有的函数都必须是某个对象的方法。如isNan()、isFinite()、parseInt()、parseFloat()、encodeURI()、encodeURIComponent()、decodeURI()、decodeURIComponent() 等均是Global对象的方法,除此之外,Global对象还包括一些属性。

    Math

   
Math中有许多属性和方法可以用于数学计算,和Java中的比较类似。

2.3  Host 对象

    除了原始对象和Build-in对象外,其他对象均是Host对象。所有的BOM和DOM对象均被认为是Host对象。

类成员的访问方式

   
在面向对象语言程序设计中,常见的类成员访问方式有public、protected和private。在ECMAScript中,只有public一种访问方式,对象中所有的属性和方法都是可见的,因此,在程序设计时需要额外注意系统安全性的问题。在没有合理的程序规范之前,程序员在编写ECMAScript代码时,通常使用一定规范的命名方式来说明该属性或方法是私有的(仅仅是说明而已,实际上还是公有的),例如在名称前后加上下划线,或只在名称前加下划线。另外,在ECMAScript中没有static方法。

4  this
关键字

    this关键字是ECMAScript中一个非常重要的概念,通常在对象的方法中使用。

function whatFruit() {
  alert(
this.color);
}


var table1 = new Object;
table1.fruit 
= "apple";
table1.whatFruit 
= whatFruit;
var table2 = new Object;
table2.fruit 
= "pear";
table2.whatFruit 
= whatFruit;
table1.whatFruit();  
//输出apple
table2.whatFruit();  //输出pear

    当一个变量前面没有对象或this来引用时,ECMAScript认为该变量是一个本地的或全局变量,于是在本地和全局中去搜寻该变量,如果最后仍没有找到,将会在alert中输出null。

    文章待续……

posted on 2006-06-30 15:20 Flyingis 阅读(2335) 评论(0)  编辑  收藏 所属分类: Web 客户端技术


只有注册用户登录后才能发表评论。


网站导航: