繼承的實現方式之 假借建構函式
阿新 • • 發佈:2020-07-15
基本形式
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,所有需要繼承的方法都必須定義在建構函式中,不能實現函式的複用
- 沒有形成原型鏈,建立的例項只是子類的例項不是父類的例項。在子類例項和父類原型之間使用instanceof或isPropertypeOf會返回false。