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。

  • 相关阅读:
    数组与列表访问某一列的方法不同
    python 切片
    mapreduce统计数据库中的单词个数
    Call From s150/192.168.109.150 to 0.0.0.0:10020 failed on connection exception:
    message from server: "Host 'XXXX' is not allowed to connect to this MySQL server"
    Hadoop格式化namenode
    构建FP-growth算法高效发现频繁项集
    TypeError: '
    矩阵与列表取出行(左开右闭)
    2.nohup和&后台运行,进程查看及终止
  • 原文地址:https://www.cnblogs.com/shaohz2014/p/3825928.html
Copyright © 2011-2022 走看看