1. 程式人生 > 實用技巧 >繼承的實現方式之 假借建構函式

繼承的實現方式之 假借建構函式

基本形式

function Person(name){
    this.name = name;
}
Person.prototype.sayHi = function(){
    console.log(this.name);
}

function Student(name, mark){
    Person.call(this, name);
    this.mark = mark;
}

let student1 = new Student("Jack", 97);
console.log(student1.name, student1.mark); //Jack 97
student1.sayHi(); 
//Uncaught TypeError: student1.sayHi is not a function

在子類的建構函式中呼叫父類的建構函式,並通過call或者aplly使this始終指向建立的子類例項。

優點:

  1. 通過借用建構函式,將父類的例項屬性直接定義到了子類上,每個子類例項之間不共享
  2. 可以向父類的建構函式傳參

缺點:

  1. 無法繼承父類的原型上的屬性和方法
  2. 由於1,所有需要繼承的方法都必須定義在建構函式中,不能實現函式的複用
  3. 沒有形成原型鏈,建立的例項只是子類的例項不是父類的例項。在子類例項和父類原型之間使用instanceof或isPropertypeOf會返回false。