寄生继承详解

// 将原型继承和非原型继承组合为一体的继承方式叫做组合继承,但是这种方法的继承是有一点小缺陷的,下级函数继承了无用的属性,所以我们有了寄生继承来解决污染问题;

//创建上级构造函数-食物

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");

转载于:https://www.cnblogs.com/isAndyWu/p/11546727.html

你可能感兴趣的:(寄生继承详解)