• <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");
  • 相关阅读:
    1001. A+B Format
    1011. World Cup Betting
    1015. Reversible Primes
    1005. Spell It Right
    1020. Tree Traversals
    java初始
    lvds接口介绍
    优化对比度增强的实时图像视频去雾
    JavaScript通过attachEvent和detachEvent方法处理带参数的函数
    Chrome类似于Firefox Firebug的功能
  • 原文地址:https://www.cnblogs.com/isAndyWu/p/11546727.html
Copyright © 2020-2023  润新知