zoukankan      html  css  js  c++  java
  • 使用prototype 对象定义类成员

    使用prototype 对象定义类成员
    上一节介绍了类的实现机制以及构造函数的实现,现在介绍另一种为类添加成员的机
    制:prototype 对象。当new 一个function 时,该对象的成员将自动赋给所创建的对象,例
    如:
    <script language="JavaScript" type="text/javascript">
    <!--
    //定义一个只有一个属性prop的类
    function class1(){
    this.prop=1;
    }
    //使用函数的prototype属性给类定义新成员
    class1.prototype.showProp=function(){
    alert(this.prop);
    }
    //创建class1的一个实例
    var obj1=new class1();
    //调用通过prototype原型对象定义的showProp方法
    obj1.showProp();
    //-->
    </script>
    因为prototype 是一个JavaScript 对象,所以可以为prototype 对象添加、修改、删除方
    法和属性。从而为一个类添加成员定义。
    了解了函数的prototype对象,现在再来看new的执行过程。
    (1)创建一个新的对象,并让this指针指向它;
    (2)将函数的prototype对象的所有成员都赋给这个新对象;
    (3)执行函数体,对这个对象进行初始化的操作;
    (4)返回(1)中创建的对象。
    和上一节介绍的new 的执行过程相比,现在是多了用prototype 来初始化对象的过程,
    这也和prototype 的字面意思相符,它是所对应类的实例的原型。这个初始化过程发生在函
    数体(构造器)执行之前,所以可以在函数体内部调用prototype 中定义的属性和方法,例
    如:
    <script language="JavaScript" type="text/javascript">
    <!--
    //定义一个只有一个属性prop的类
    function class1(){
    this.prop=1;
    this.showProp();
    }
    //使用函数的prototype属性给类定义新成员
    class1.prototype.showProp=function(){
    alert(this.prop);
    }
    //创建class1的一个实例
    var obj1=new class1();
    //-->
    </script>
    和上一段代码相比,这里在class1 的内部调用了prototype中定义的方法showProp,从
    而在对象的构造过程中就弹出了对话框,显示prop属性的值为1。
    需要注意,原型对象的定义必须在创建类实例的语句之前,否则它将不会起作用,例如:
    <script language="JavaScript" type="text/javascript">
    <!--
    //定义一个只有一个属性prop的类
    function class1(){
    this.prop=1;
    this.showProp();
    }
    //创建class1的一个实例
    var obj1=new class1();
    //在创建实例的语句之后使用函数的prototype属性给类定义新成员,只会对后面创建的对象有效
    class1.prototype.showProp=function(){
    alert(this.prop);
    }
    //-->
    </script>
    这段代码将会产生运行时错误,显示对象没有showProp 方法,就是因为该方法的定义
    是在实例化一个类的语句之后。
    由此可见,prototype对象专用于设计类的成员,它是和一个类紧密相关的,除此之外,
    prototype还有一个重要的属性:constructor,表示对该构造函数的引用,例如:
    function class1(){
    alert(1);
    }
    class1.prototype.constructor(); //调用类的构造函数
    这段代码运行后将会出现对话框,在上面显示文字“1”,从而更容易看出一个prototype
    是和一个类的定义紧密相关的。实际上:class1.prototype.constructor===class1。

  • 相关阅读:
    JavaScript中的ActiveXObject控制Excel的方法
    事务的作用
    SQL2005关于quotename的用法
    简易办公系统的设计与实现 文献收集
    《UML建模在办公自动化(OA)系统设计中的应用 》论文笔记(四)
    《基于 UML 与 J2EE 的高校 OA 系统的分析与设计》论文笔记(三)
    《浅谈企业办公管理OA系统的设计与实现 》论文笔记(二)
    《基于UML连锁超市OA系统公文流转的设计》论文笔记(五)
    《暗时间》读书笔记
    《无纸化办公管理系统的设计与实现》论文笔记(一)
  • 原文地址:https://www.cnblogs.com/shaohz2014/p/3825928.html
Copyright © 2011-2022 走看看