• 使用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。

  • 相关阅读:
    算法笔记 #003# 堆排序
    算法导论(第三版)练习 6.2-1 ~ 6.2-6
    Python开发【第六篇】:模块
    Python开发【第五篇】:Python基础之杂货铺
    Python开发【第四篇】:Python基础之函数
    Python开发【第三篇】:Python基本数据类型
    Python开发【第二篇】:初识Python
    python mysql
    跟着ttlsa一起学zabbix监控呗
    zabbix进程构成
  • 原文地址:https://www.cnblogs.com/shaohz2014/p/3825928.html
Copyright © 2020-2023  润新知