• javascrpt 继承


    一、基于原型链方式实现的继承

    缺点:无法从子类中调用父类的构造函数,所以没有办法把子类的属性赋值到父类中。

    如果父类中有引用类型,例如:数组。此时这个引用类型会添加到子类的原型当中,一但子类某个对象修改,则影响全部其他对象。

    参考代码:

      

    function Parent(){
        this.pv = "parent";
        this.color = ["red","yellow"];
    }
    Parent.prototype.showParentValue = function(){
        alert(this.pv);
    }
    function Child(){
        this.cv = "child";
    }
    Child.prototype = new Parent();
    Child.prototype.showChildValue = function(){
        alert(this.cv);
    }
    
    var c1  = new Child();
    //Child中的原型的color被修改
    c1.color.push("bule");//red yellow blue
    alert(c1.color);
    var c2 = new Child();//同样影响c2中color值
    alert(c2.color);//red yellow blue

    二、基于伪装方式实现的继承

    缺点:没有完成原型的指向。只能继承父类属性无法完成父类方法的继承。

    参考代码:

    function Parent(name){
        this.color = ["red","blue"];
        this.name=name;
    }
    function Child(name,age){
        this.age = age;
        Parent.call(this,name);//用第一个变量的上下文调用这个函数
    }
    var c1 = new Child("Leon",12);
    var c2 = new Child("Ada",22);
    alert(c1.name + "," +c1.age);
    alert(c2.name + "," +c2.age);

    三、终极方案-组合方式实现继承
    原理:通过原型链方式实现方法的继承,通过伪装方式实现属性的继承。

    参考代码:

    /**
     * 组合的实现方式是属性通过伪造的方法实现,方法通过原型链的方式实现
     */
    function Parent(name){
        this.color = ["red","blue"];
        this.name = name;
    }
    Parent.prototype.ps = function(){
        alert(this.name + "[" + this.color + "]");
    }
    function Child(name,age){
        //已经完成了伪造
        Parent.call(this,name);
        this.age = age;
    }
    Child.prototype = new Parent();
    Child.prototype.say = function(){
        alert(this.name + "," + this.age + "[" + this.color + "]")
    }
    
    var c1 = new Child("rigid",30);
        
  • 相关阅读:
    (10)C#静态方法,静态字段,静态类,匿名类
    (9)C#类
    (8)C#字符串
    (7)C#流程控制
    (6)C#方法,作用域,方法重载
    (5)C#运算符
    各个品牌主板快速开机启动
    口袋的天空
    繁忙的都市
    取水
  • 原文地址:https://www.cnblogs.com/rigid/p/4300714.html
Copyright © 2020-2023  润新知