一排截、原型鏈繼承
概念:通過改造原型鏈實現繼承娱节,利用原型鏈的特征實現繼承
那么為啥要有繼承挠蛉?
繼承的作用:繼承:可以讓多個構造函數之間建立關聯,便于管理和復用
代碼層面上的繼承:繼承一些屬性和方法
原型鏈繼承
二肄满、繼承-寄生組合繼承
student實例上有name age 谴古,而原型proto上不需要再有這些屬性,所以利用Object.create改裝下
Object.create(參數對象)
1稠歉、Object.create會創(chuàng)建一個新對象
2掰担、并且這個新對象的proto會指向傳入的參數對象
寄生組合繼承
三刃泡、繼承 - 組合繼承
組合繼承:
概念:組合繼承有時候也叫偽經典繼承预厌,指的是將原型鏈 和 借用構造函數 call 技術組合到一塊,
從而發(fā)揮二者之長的一種繼承模式劫拗,其背后的思路: 是使用原型鏈實現對原型屬性和方法的繼承 (主要是方法)阅羹,
而通過借用構造函數來實現對實例屬性構造的繼承勺疼。這樣既通過在原型上定義方法實現了函數復用,又能保證每個實例都有它的自己的屬性捏鱼。
// 1. 定義Person構造函數
function Person (name, age) {
this.name = name
this.age = age
}
Person.prototype.say = function () {
console.log('人類會說話')
}
// 2. 定義Student構造函數
function Student (name, age, className) {
// call
// 1\調用函數
// 2\改變函數執(zhí)行時的this指向
Person.call(this, name, age) // 實現構造屬性的繼承
this.className = className
}
// 3. 原型繼承: 利用原型鏈, 繼承于父級構造函數, 繼承原型上的方法
// 語法: 子構造函數.prototype = new 父構造函數()
Student.prototype = new Person()
Student.prototype.study = function() {
console.log('學生在學習')
}
let stu = new Student('張三', 18, '80期')
stu.say()
console.log(stu)
// 方法通過 原型繼承
// 屬性通過 父構造函數的.call(this, name, age)