Javascript之面向对象编程--类的实现(2)

时间:2021-05-20 19:51:28

/************************************
*Author:Java619
*Time:2007-01-25
*************************************/
Javascript之面向对象编程--类的实现(2)

这一节我介绍利用prototype对象为类添加成员的机制.

当new一个function时,prototype对象的所有成员将自动赋给所创建的对象,例如:

Javascript之面向对象编程--类的实现(2)// 定义一个只有name属性的Person类
Javascript之面向对象编程--类的实现(2)Javascript之面向对象编程--类的实现(2)
function  Person(name) ... {
Javascript之面向对象编程--类的实现(2)  
this.name=name;
Javascript之面向对象编程--类的实现(2)}

Javascript之面向对象编程--类的实现(2)
// 下面使用函数的prototype属性为类定义新成员
Javascript之面向对象编程--类的实现(2)Javascript之面向对象编程--类的实现(2)
Person.prototype.sayHello = function () ... {
Javascript之面向对象编程--类的实现(2)   alert(
"你好!"+this.name);
Javascript之面向对象编程--类的实现(2)}

Javascript之面向对象编程--类的实现(2)
// 创建类的一个实例
Javascript之面向对象编程--类的实现(2)
var  p1 = new  Person( " ceun " );
Javascript之面向对象编程--类的实现(2)
// 调用通过prototype原型对象定义的sayHello方法
Javascript之面向对象编程--类的实现(2)
p1.sayHello();

prototype是一个Javascript对象,可以为对象添加、删除,修改方法和属性。
从而为一个类添加成员定义。

了解了prototype对象,现在我们来看下new 的执行过程:
(1)当解释器遇到new操作符时便创建一个空对象,并将其中的this指针都指向这个新建的对象;
(2)将函数的prototype对象的所有成员都自动赋给这个新对象;
(3)开始运行Person这个函数,对这个对象进行初始化操作;
(4)返回(1)中所创建的对象.

上一节介绍的new执行过程相比,多了用prototype来初始化对象的过程,这也和prototype
的字面意思相符,它是所对应类的实例的原型。这个初始化过程发生在函数体(构造器)执行之
前,所以可以在函数体内部调用prototype中定义的属性和方法,例如:

Javascript之面向对象编程--类的实现(2)Javascript之面向对象编程--类的实现(2)function  Person(name) ... {
Javascript之面向对象编程--类的实现(2)   
this.name=name;
Javascript之面向对象编程--类的实现(2)   
this.sayHello();
Javascript之面向对象编程--类的实现(2)}

Javascript之面向对象编程--类的实现(2)Javascript之面向对象编程--类的实现(2)Person.prototype.sayHello
= function () ... {
Javascript之面向对象编程--类的实现(2)   alert(
"你好!"+this.name);
Javascript之面向对象编程--类的实现(2)}

Javascript之面向对象编程--类的实现(2)
// 创建该类一个实例,构造器中调用了其原型(prototype)中定义的sayHello方法
Javascript之面向对象编程--类的实现(2)
var  p1 = new  Person( " ceun " );

注意:原型对象的定义必须在创建类的实例之前,否则将不会起作用。
由此可见,prototype对象专用于设计类的成员,它是和一个类紧密相关的,除此之外,prototype
还有一个重要属性:constructor,表示对该构造函数的引用,如:

Javascript之面向对象编程--类的实现(2)Javascript之面向对象编程--类的实现(2)function  Person() ... {
Javascript之面向对象编程--类的实现(2)  alert(
"Hello");
Javascript之面向对象编程--类的实现(2)}
 
Javascript之面向对象编程--类的实现(2)Person.prototype.constructor();
// 调用类的构造函数

上段代码运行后将会出现对话框,在上面显示"Hello",从而可以看出一个prototype是和一个类的定
义紧密相关的.实际上:Person.prototype.constructor===Person.