zoukankan      html  css  js  c++  java
  • 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);
        
  • 相关阅读:
    JDK8的JVM内存模型小结
    揭开Service Mesh的神秘面纱
    通过Shell脚本读取properties文件中的参数时遇到 换行符的问题
    NodeJs+Express实现简单的Web增删改查
    SpringBoot之Thymeleaf模板引擎
    面向对象(下)
    内部类
    线程学习oneday
    Python-使用tkinter实现的Django服务进程管理工具
    Python-使用百度文字识别API实现的文字识别工具
  • 原文地址:https://www.cnblogs.com/rigid/p/4300714.html
Copyright © 2011-2022 走看看