zoukankan      html  css  js  c++  java
  • <JavaScript> 寄生继承详解

    // 将原型继承和非原型继承组合为一体的继承方式叫做组合继承,但是这种方法的继承是有一点小缺陷的,下级函数继承了无用的属性,所以我们有了寄生继承来解决污染问题;
    
    //创建上级构造函数-食物
    
    function Food(name, hot, taste){
    
            this.name = name;
    
            this.hot = hot;
    
            this.taste = taste;
    
    }
    
    //为了清楚的注释过程,我们分开写上级构造函数的原型方法-变质
    
    Food.prototype.bad = function(){
    
            console.log("保质期3天");
    
    };
    
    //创建下级构造函数-面包
    
    function Bread(name, hot, taste, brand){
    
            //这里是借用上级函数的静态属性,也叫非原型继承
    
            Food.apply(this, arguments);
    
            //自己的属性
    
            this.brand = brand;
    
    }
    
    //创建一个空的函数
    
    var fn = function(){};
    
    //将空函数原型替换为上层函数的原型,这样的空函数没有了私有属性,而且原型吃的还是人家的是不是和寄生虫一样呢?
    
    fn.prototype = Food.prototype;
    
    //使用空函数实例赋值给下级函数原型,这样有回到了我们的原型继承,这次继承的是fn的原型,很干净
    
    Bread.prototype = new fn();
    
    //当然还原constructor还是必须的,但是这里不能写  read.constructor = Bread  因为Bread.constructor是  Function () {};
    
    Bread.prototype.constructor = Bread;
    
    //下面创建下级函数自己的原型方法,值得注意的是扩展自身原型之前完成继承,不然会有覆盖问题
    
    Bread.prototype.dry = function(){
    
            console.log("一天不吃咬不动了!");
    
    }
    
    //下面我们可以有下级元素创建实例测试了
    
    var bread = new Bread("脏脏包", "1000k", "sweet", "golden phinex");
  • 相关阅读:
    Java基本元素
    wsgiref模块
    Web框架与HTTP协议
    pymysql 于pycharm中操作mysql
    mysql
    协程
    jQuery选择器
    网络编程→锁/队列/线程
    初识网络编程&并发编程
    navcat 如何将一个库的表抽到另一个库中
  • 原文地址:https://www.cnblogs.com/isAndyWu/p/11546727.html
Copyright © 2011-2022 走看看