2 对象基础
2.1 OO术语
2.1.1 怎样才能称为OO语言?
一个语言要被称为OO语言,它必须为开发者提供四个基本特性:
·Encapsulation(封装)--将相关信息:无论是数据或方法都贮存在一起,成为一个对象;
·Aggregation(聚合)--能在一个对象中存放另一对象 ;
·Inheritantance(继承)--一个类中的一些属性和方法依赖于某一个类(或某几个类)。
·Polymorphism(多态)--一个方法或函数可以以多种方式进行工作;
ECMAScript支持以上所有四种特性,因此它被认为面向对象语言。
2.1.2 对象的成份
对象的成份?当然不是碳水化合物。事实上,在ECMAScript中,对象由一些特性(attributes)组成,这些特性可能是基本数据类型,或者一个索引值。如果这个特性包含函数,则被称为对象的“方法”(method),否则,被称为对象的“属性”(property)。
2.2 与对象作伴
2.2.1 对象定义(等价于一般语言的类)与实例化
对象使用new关键字建立,返回一个实例,然后你可以给它一个你觉得合适的变量名:
var oObject = new Object();
var oStringObject = new String();
嗯上面的第一行代码建立一个object的实例,然后把它放在oObject的变量中;第二行则建立一个String的实例,然后把它放在oStringOject变量中。注意:如果没有参数,圆括号可以省略,就象这样:
var oObject = new Object;
var oStringObject = new String;
2.2.2 object references (对象引用)
前面我们介绍了对象引用类型(reference types)。这就是说,直接存取对象的物理表现是不可能的,你只能存取对象的引用。每当你建立一个对象时,这个对象的引用就被放入了变量中,而不是这个活动对象本身。
2.2.3 对象的销毁
ECMAScript带有垃圾收回程序,也说是说,你可以不必“生后手”(家乡土话:生前手,不生后手,呵呵,希望你能听得懂)。如果一个对象不再被引用,那么它就是一个可回收对象。垃圾回收程序一旦运行,所有的可回收对象就会被销毁。当一个函数或方法运行结束,垃圾回收程序就会被运行,回收所有的本地变量。嗯,不过,它也可能会运行任何时候,反正我是说不准。
如何你想某个对象被强迫回收,那么请给它赋null值,就象这样:
var oObject = new Object;
//do something with the object here
oObject = null;
对象给了null值,就不再有引用,这就意味着:下次垃圾收回程序运行时,它就会game over!
给不用的对象赋值为null是好习惯,你会让程序更少的出错,会让IE这样不负责任的垃圾回收器正常工作。IE的垃圾回收程序工作时常很糟糕,可能有些对象只有当页面unload(关闭)时,才会释放。