建立即繼承---構造函數繼承java
何爲構造函數?若是你還不清楚構造函數和普通函數的區別,那請看JavaScript構造函數與普通函數設計模式
構造函數繼承的核心 是 call()
或 apply()
的使用,經過這個方法,改變函數的做用環境.app
function SuperClass(name){ this.name =name; this.book = ['c','java','htnl'] this.getBook =function(){ return this.book; } } //爲父類添加方法 SuperClass.prototype.getName =function(){ return this.name; } //聲明子類 function SubClass(name){ SuperClass.call(this,name) } var a = new SubClass('demongao'); var b = new SubClass('gsc'); a.book.push("cccc"); console.log(a.book,a.name); //["c", "java", "htnl", "cccc"] "demongao" console.log(b.book,b.name); //["c", "java", "htnl"] "gsc" console.log(a.getBook()); //["c", "java", "htnl", "cccc"] console.log(a.getName()) //TypeError
子類經過 SuperClass.call(this,name) 將子類中的變量在父類中執行了一遍,因爲父類中是給 this 綁定屬性的,所以子類天然也就繼承了父類的共有屬性.函數
因爲這種類型的繼承沒有涉及原型prototype
,因此父類的原型方法天然不會被子類繼承,而若是想被子類繼承就必需要放在構造函數中,這樣建立出來的每一個實例都會單獨擁有一份而不能共用
,這就違背了代碼複用的原則this
下一節講解 組合繼承 ,它具有上兩種繼承式的優勢prototype
我的博客設計
JavaScript 設計模式 --- 張容銘 著code
本人對類式繼承的一點點理解,如果那裏解釋的有問題,請多指教,謝謝!繼承