一、原型繼承
什么是原型鏈?
利用原型鏈,繼承父級建構式,繼承原型上的方法
語法 : 子建構式.prototype = new 父級建構式 ( )
function Person(a) {}
Person.prototype.eat=()=>{
console.log('吃');
}
function Son(b) {}
Son.prototype = new Person()
let son1 = new Son()
son1.eat() //吃
擴展點 子建構式原型上原來的constructor不指向原來的建構式了
console.dir(Son);
console.dir(Person);

解決方案 指回建構式
Son.prototype.constructor = Son
二、組合繼承
組合繼承 : 屬性 + 方法 (原型鏈 + call )
在原型的基礎上 繼承屬性 :
是使用原型鏈實作對原型屬性和方法的繼承 (主要是方法),而通過借用建構式來實作對實體屬性構造的繼承,
function Person(name, age) {
this.name = name
this.age = age
}
Person.prototype.eat = () => {
console.log('吃');
}
function Son(name, age, hobby) {
Person.call(this, name, age) //繼承建構式的屬性
this.hobby = hobby
}
Son.prototype = new Person()
let son1 = new Son('張三','18','寫博客')
son1.eat()
Son.prototype.constructor = Son
console.log(son1.name,son1.age,son1.hobby); // '張三','18','寫博客'
三、寄生組合繼承
Son.prototype = new Person()
console.dir(Son);
在組合繼承的基礎上發現 new Person時 Person并沒有去使用,我們只是通過創建父建構式時 去找建構式的原型,并沒有對父建構式進行賦值等操作,所以就要對new Person進行優化,
只需要把new Person 改為 Object.creat(Person.prototype)
Son.prototype = Object.create(Person.prototype)
Object.create(物件) 做了兩件事
Object.create 會創建一個新物件,
并且這個新物件的
__proto__會指向傳入的引數物件

四、class繼承
重點 extends、super 先呼叫super在呼叫自己
// 繼承關鍵字 => extends
class Person {
constructor (name, age) {
this.name = name
this.age = age
}
jump () {
console.log('會跳')
}
}
class Teacher extends Person {
constructor (name, age, lesson) {
super(name, age) // extends 中, 必須呼叫 super(), 會觸發執行父類的建構式
this.lesson = lesson
console.log('建構式執行了')
}
sayHello () {
console.log('會打招呼')
}
}
let teacher1 = new Teacher('zs', 18, '體育')
console.log(teacher1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/293745.html
標籤:其他
