寄生繼承詳解


// 將原型繼承和非原型繼承組合為一體的繼承方式叫做組合繼承,但是這種方法的繼承是有一點小缺陷的,下級函數繼承了無用的屬性,所以我們有了寄生繼承來解決污染問題; //創建上級構造函數-食物 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");


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM