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

    //组合继承指的是将原型链和借用构造函数(call、apply)的技术组合到一起,从而发挥二者之长的一种继承模式,
    //其背后的思路就是使用原型链实现对原型属性和方法的继承;
    //而通过借用构造函数来实现对实例属性的继承。这样,既通过在原型上定义方法实现了函数复用,又能保证每个实例都有它自己的属性。
    //详见《高三》6.3.3章节  2014-12-17

    function SuperType(name) {
        this.superName = name;
        this.colors = ["red", "blue"];
    }
    SuperType.prototype.say = function () {
        document.write("Hello,I'm " + this.superName + "。<br/>");
    }

    function SubType(name, age) {
        SuperType.call(this, name); //借用构造函数继承,还可以给父类的构造函数传递参数

        //定义子类自己的属性
        this.age = age;
    }

    /*** 因为上面子类构造函数继承了父类的实例成员,所以此处只需要继承父类的原型成员即可 ***/
    //SubType.prototype = new SuperType(); //同时继承了基类的原型成员和实例成员,但这样写会使父类构造函数执行两次。(《高三》P172)
    SubType.prototype = SuperType.prototype; //只继承基类的原型成员,而不继承实例成员。这样是最合理的,并且父类构造函数也只执行一次。

    SubType.prototype.constructor = SubType;
    SubType.prototype.SaySub = function () {
        document.write("Hello,My subName is " + this.superName + ",my age is: "+this.age+"。<br/>");
    }


    var instance1 = new SubType("wede",25);
    instance1.colors.push("green");
    document.write(instance1.colors); //red,blue,green
    instance1.say(); //Hello,I'm wede。
    instance1.SaySub(); //Hello,My subName is wede,my age is: 25。

            
    var instance2 = new SubType("kitty", 18);
    document.write(instance2.colors); //red,blue
    instance2.say(); //Hello,I'm kitty。
    instance2.SaySub(); //Hello,My subName is kitty,my age is: 18。

  • 相关阅读:
    51nod1381 硬币游戏
    51nod1381 硬币游戏
    51nod1384 全排列
    LOJ P10130 点的距离 题解
    POJ P1985 Cow Marathon 题解
    求树的直径(两种方法)
    洛谷 P3518 [POI2011] SEJ-Strongbox 题解
    洛谷 UVA12101 Prime Path 题解
    POJ P2251 Dungeon Master 题解
    POJ P3009 Curling 2.0 题解
  • 原文地址:https://www.cnblogs.com/zhaow/p/9754423.html
Copyright © 2011-2022 走看看