zoukankan      html  css  js  c++  java
  • JavaScript寄生组合式继承分析

    JavaScript寄生组合式继承特点:

    避免了在子类prototype上创建不必要多余的属性,相比直接继承基类的实例效率要高。

    是JavaScript 实现继承的最有效方式。

    <script>
                //定义基类构造函数和属性
                function BaseClass(name,age){
                    this.name=name;
                    this.age=age;
                }
                
                //在基类原型上添加sayName方法
                BaseClass.prototype.sayName=function(){
                    console.log(this.name);
                }
                
                //定义子类构造函数和属性
                function SubClass(name,age,job){
                    //在子类中构造父类的属性,此行执行完成后,子类中就有了父类中的所有属性。
                    BaseClass.apply(this,arguments);
                    
                    //定义子类的属性
                    this.job=job;
                }
                
                //通过将基类的原型赋值给子类的原型,实现子类继承父类中的方法
                inheritPrototype(SubClass,BaseClass);
                
                //定义子类的方法
                SubClass.prototype.sayJob=function(){
                    console.log(this.job);
                }
                
                //寄生组合式继承
                function inheritPrototype(subClass,baseClass){
                    //先创建一个基类原型副本
                    function fun(){};
                    fun.prototype=baseClass.prototype;//基类原型中定义了基类的方法
                    
                    //再将具有基类原型的新实例赋给子类原型,这样子类就继承了父类中的方法
                    var obj=new fun();
                    obj.constructor=SubClass
                    SubClass.prototype=obj;
                    
                    /**
                     * backbone中extend 部分源码
                     * 
                     * var Surrogate=function(){this.constructor=child;}
                     * Surrogate.prototype=parent.prototype;
                     * child.prototype=new Surrogate;
                     * 
                     */
                }
             
              var subClass=    new SubClass('张三',18,'Coder');
             
              console.log(subClass);
              subClass.sayName();
              subClass.sayJob();
            </script>

  • 相关阅读:
    主要工业以太网性能横向比较
    聊一聊工业以太网
    FPGA学习之RoadMap
    我眼中的FPGA
    板级通信总线之SPI及其Verilog实现
    ALTERA FPGA中实现低于时钟周期的端口延时
    Javascript 闭包浅析(一)
    node.js docker centos7 下环境构建命令
    ruby sass 命令
    如何配置nginx的反向代理nodes 3000端口项目
  • 原文地址:https://www.cnblogs.com/rdst/p/4713083.html
Copyright © 2011-2022 走看看