面向對象的JavaScript之繼承(二) 構造函數繼承

引言

建立即繼承---構造函數繼承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

本人對類式繼承的一點點理解,如果那裏解釋的有問題,請多指教,謝謝!繼承

相關文章
相關標籤/搜索