zoukankan      html  css  js  c++  java
  • 对象继承——组合继承

    组合继承,即组合构造函数继承和原型链继承方式,使用构造函数继承方式继承实例属性,即非共享属性;使用原型链继承方式继承共享的属性和方法。

    <script>
        /**父类型构造函数,定义实例属性**/
        function SuperType(name) {
            /**必须添加this关键字,因为下面子类型继承是通过call方法,在子类型的作用范围调用父类构造函数的,如果不指定this
              *关键字,则不能被子类型继承,并且会报×× is not defined 的错误
             **/
            this.name = name;
            this.colors = ["red", "blue", "green"];
            this.show = function(){
                console.log("colors:" + this.colors);
            }
        }
        /**父类型原型对象中的方法**/
        SuperType.prototype.sayName = function(){
            console.log(this.name);
        }
        /**子类型构造函数**/
        function SubType(name,age) {
            SuperType.call(this,name);//构造函数,继承父类型中的属性,并且不与其他类型共享
            this.age = age;//自己新创建的实例属性
        }
        /**将父类型的实例赋值给子类型的原型对象,父类型实例中的两个实例属性此时会变成子类型的原型对象,但是因为子类型的构
          *造函数内部调用了父类型的构造函数,所以子类型中也有自己的实例属性了,也即,子类型中有两组name和colors,一组是自
          *父类型实例中的属性,作为子类型的原型属性;一组是子类型通过调用父类型构造函数定义的自己的实例属性
         **/
        SubType.prototype = new SuperType();
        
        /**在子类型中定义共享方法**/
        SubType.prototype.sayAge = function(){
            console.log(this.age);
        }
        
        
        var ins1 = new SubType("Nicholars",29);
        ins1.colors.push("black");
        console.log(ins1.colors);//["red", "blue", "green", "black"]
        ins1.sayName();//Nicholars
        ins1.sayAge();//29
        ins1.show();//colors:red,blue,green,black
        delete ins1.colors;//删除掉了子类型实例中的实例属性,则原型中的原型属性就会发挥作用
        console.log(ins1.colors);//["red", "blue", "green"]
        
        
        var ins2 = new SubType("Greg",27);
        console.log(ins2.colors);//["red", "blue", "green"]
        ins2.sayName();//Greg
        ins2.sayAge();//27
        ins2.show();//colors:red,blue,green
        
        console.log(ins1.sayName == ins2.sayName);//首先,在各自内部查找实例方法,没有,找原型方法,还是没有,去父类找原型方法
        
        
    </script>
  • 相关阅读:
    Hibernate配置
    Log4j 局部笔记
    有关接口 笔记 懒人版
    JAVA面向对象编程这本书的摘录~!(2016-5-23)
    关于关闭数据流
    安卓桌面开发小应用
    ACM Sdut 2158 Hello World!(数学题,排序) (山东省ACM第一届省赛C题)
    hdu 1573 A/B (扩展欧几里得)
    hdu 1788 Chinese remainder theorem again(最小公倍数)
    ACM hdu 1019 Least Common Multiple
  • 原文地址:https://www.cnblogs.com/qingyaxuan/p/9068494.html
Copyright © 2011-2022 走看看