/************************************
*Author:Java619
*Time:2007-01-25
*************************************/
Javascript之面向对象编程--类的实现(2)
这一节我介绍利用prototype对象为类添加成员的机制.
当new一个function时,prototype对象的所有成员将自动赋给所创建的对象,例如:
function Person(name) {
this.name=name;
}
// 下面使用函数的prototype属性为类定义新成员
Person.prototype.sayHello = function () {
alert("你好!"+this.name);
}
// 创建类的一个实例
var p1 = new Person( " ceun " );
// 调用通过prototype原型对象定义的sayHello方法
p1.sayHello();
prototype是一个Javascript对象,可以为对象添加、删除,修改方法和属性。
从而为一个类添加成员定义。
了解了prototype对象,现在我们来看下new 的执行过程:
(1)当解释器遇到new操作符时便创建一个空对象,并将其中的this指针都指向这个新建的对象;
(2)将函数的prototype对象的所有成员都自动赋给这个新对象;
(3)开始运行Person这个函数,对这个对象进行初始化操作;
(4)返回(1)中所创建的对象.
和上一节介绍的new执行过程相比,多了用prototype来初始化对象的过程,这也和prototype
的字面意思相符,它是所对应类的实例的原型。这个初始化过程发生在函数体(构造器)执行之
前,所以可以在函数体内部调用prototype中定义的属性和方法,例如:
this.name=name;
this.sayHello();
}
Person.prototype.sayHello = function () {
alert("你好!"+this.name);
}
// 创建该类一个实例,构造器中调用了其原型(prototype)中定义的sayHello方法
var p1 = new Person( " ceun " );
注意:原型对象的定义必须在创建类的实例之前,否则将不会起作用。
由此可见,prototype对象专用于设计类的成员,它是和一个类紧密相关的,除此之外,prototype
还有一个重要属性:constructor,表示对该构造函数的引用,如:
alert("Hello");
}
Person.prototype.constructor(); // 调用类的构造函数
上段代码运行后将会出现对话框,在上面显示"Hello",从而可以看出一个prototype是和一个类的定
义紧密相关的.实际上:Person.prototype.constructor===Person.