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

来源:互联网 发布:淘宝网 for mac 编辑:程序博客网 时间:2024/06/07 04:03

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

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

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

//定义一个只有name属性的Person类
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中定义的属性和方法,例如:

function Person(name){
   
this.name=name;
   
this.sayHello();
}

Person.prototype.sayHello
=function(){
   alert(
"你好!"+this.name);
}

//创建该类一个实例,构造器中调用了其原型(prototype)中定义的sayHello方法
var p1=new Person("ceun");

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

function Person(){
  alert(
"Hello");
}
 
Person.prototype.constructor();
//调用类的构造函数

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

原创粉丝点击