zoukankan      html  css  js  c++  java
  • js原型继承的几种方式

    1. 原型链继承

    2,构造函数继承(对象冒充继承)

    3,组合继承(原型链继承+构造函数继承)

    4,原型式继承

    5. 寄生组合式继承

    一。原型链继承

    function Show(){
    this.name="run";
    }

    function Run(){
    this.age="20"; //Run继承了Show,通过原型,形成链条
    }
    Run.prototype=new Show();
    var show=new Run();
    alert(show.name)//结果:run

    二。构造函数继承(对象冒充继承)

    了解决引用共享和超类型无法传参的问题,我们采用一种叫借用构造函数的技术,或
    者成为对象冒充(伪造对象、经典继承)的技术来解决这两种问题

    function Box(age){
    this.name=['Lee','Jack','Hello']
    this.age=age;
    }
    function Desk(age){
    Box.call(this,age); //对象冒充,给超类型传参
    }
    var desk = new Desk(200);
    alert(desk.age);//200
    alert(desk.name);//['Lee','Jack','Hello']
    desk.name.push('AAA'); //添加的新数据,只给 desk
    alert(desk.name)//['Lee','Jack','Hello','AAA']

    三。组合继承(原型链继承+构造函数继承)

    借用构造函数虽然解决了刚才两种问题, 但没有原型, 复用则无从谈起。 所以, 我们需
    要原型链+借用构造函数的模式,这种模式成为组合继承。

    function Box(age) {
    this.name = ['Lee', 'Jack', 'Hello']
    this.age = age;
    }
    Box.prototype.run = function () {
    return this.name + this.age;
    };
    function Desk(age) {
    Box.call(this, age); //对象冒充
    }
    Desk.prototype = new Box(); //原型链继承
    var desk = new Desk(100);
    alert(desk.run());

    四。原型式继承

    这种继承借助原型并基于已有的对象创建新对象,
    同时还不必因此创建自定义类型

    function obj(o) { //传递一个字面量函数
    function F() {} //创建一个构造函数
    F.prototype = o; //把字面量函数赋值给构造函数的原型
    return new F(); //最终返回出实例化的构造函数
    }
    var box = { //字面量对象
    name : 'Lee',
    arr : ['哥哥','妹妹','姐姐']
    };
    var box1 = obj(box); //传递
    alert(box1.name);
    box1.name = 'Jack';
    alert(box1.name);
    alert(box1.arr);
    box1.arr.push('父母');
    alert(box1.arr);
    var box2 = obj(box); //传递
    alert(box2.name);
    alert(box2.arr); //引用类型共享了

    五。寄生组合式继承

    寄生组合式继承解决了两次调用的问题,组合式继承就会有两次调用的情况

    基本模型如下:

    function object(o) {
        function F() {}
        F.prototype = o;
        return new F();
    }
    
    function inheritPrototype(subType, superType) {
        var prototype = object(superType.prototype);  //创建对象
        prototype.constructor = subType;              //增强对象
        subType.prototype = prototype;                //指定对象
    }

    后面的寄生式继承和寄生组合模型式继承还搞不懂,哈哈哈,好尴尬

    寄生组合继承,解决了两次调用的问题


  • 相关阅读:
    C语言——enum
    C语言——杂实例
    pc上用C语言模拟51多任务的案例程序
    C语言结构体实例-创建兔子
    C语句模拟多任务实例
    求解1^2+2^2+3^2+4^2+...+n^2的方法(求解1平方加2平方加3平方...加n平方的和)
    啊啊啊哦哦
    2013多校联合3 G The Unsolvable Problem(hdu 4627)
    c#操作excel方式三:使用Microsoft.Office.Interop.Excel.dll读取Excel文件
    揭开Socket编程的面纱
  • 原文地址:https://www.cnblogs.com/luoguixin/p/6195902.html
Copyright © 2011-2022 走看看