Javascript繼承2:建立即繼承----構造函數繼承

//聲明父類
function SuperClass(id){
    //值類型公有屬性
    this.id = id;
    //引用類型公有屬性
    this.books = ['Html','Css'];
}
//父類聲明原型方法
SuperClass.prototype.showBooks = function(){
    console.log(this.books)
}
//聲明子類
function ChildClass(id){
    //繼承父類
    SuperClass.call(this,id)
}

var child1 = new ChildClass(1)
var child2 = new ChildClass(2)
child1.books.push('設計模式');
console.log(child1.id)    //1
console.log(child1.books) //['Html','Css','設計模式'];
console.log(child2.id)    //2
console.log(child2.books) //['Html','Css'];

child1.showBooks()          //TypeErrr
/*
* SuperClass.call(this,id)是構造函數繼承的精華,call能夠改變函數的做用域環境,
* 所以在子類中對父類調用這個方法,就是將子類的變量在父類中執行一遍,因爲父類中是給
* this綁定屬性的,所以子類也就繼承了父類的公有屬性,因爲這種方法沒有涉及原型prototype
* 因此父類原型方法不會被子類繼承,若是想要被繼承就必須放在構造函數中,這樣建立出來
* 的每一個實例都會單獨擁有一份而不能共用,這樣就違背了代碼服用的原則。
* 爲了綜合這兩種模式的優勢,有了組合式繼承。
*/

 設計模式中的經典筆錄設計模式

相關文章
相關標籤/搜索