面向?qū)ο缶幊蘋OP
它是一種編程思想耳幢,我們的編程或者學(xué)習(xí)其實(shí)是按照
類岸晦、實(shí)例
來完成的
類:繼承、封裝、多態(tài)
封裝
把實(shí)現(xiàn)一個(gè)功能的代碼封裝到一個(gè)函數(shù)中委煤,以后實(shí)現(xiàn)這個(gè)功能堂油,只需要執(zhí)行函數(shù)即可!
低耦合碧绞,高內(nèi)聚
多態(tài)
一個(gè)類(函數(shù))的多種形態(tài):
重載府框、重寫
后臺(tái)java c# 對(duì)于重載的概念:方法名相同,參數(shù)不同讥邻,叫做方法的
js中沒有嚴(yán)格意義上的重載迫靖,js如果方法重名了,只能保留最后一個(gè)
不管是后臺(tái)語言還是js都有重寫:子類重寫父類的方法
繼承
什么是繼承兴使?
子類繼承父類中的一些屬性和方法
1. 原型繼承
子類的原型指向父類的實(shí)例
【細(xì)節(jié)】
1.首先讓子類的原型指向父類的實(shí)例系宜,然后向子類的原型上擴(kuò)展方法,防止提前增加方法发魄,等原型重新指向后盹牧,之前在子類原型上擴(kuò)展的方法都沒用了(子類的原型已經(jīng)指向新的空間地址了)
- 讓子類原型重新指向父類私立,子類原型上原有的constructor沒有了励幼,為了保證構(gòu)造函數(shù)的完整性汰寓,需要手動(dòng)設(shè)置子類的原型:
Child.prototype.constructor = Child
function Parent(){
this.x = 100
}
Parent.prototype.getX = function() {
console.log(this.x)
}
var p = new Parent()
function Child(){
this.y = 100
}
// 子類的原型指向父類的實(shí)例
Child.prototype = new Parent();
Child.prototype.constructor = Child;
Child.prototype.getY = function() {
console.log(this.y)
}
var child = new Child();
以上代碼用圖片表示:
通過圖片可以得出原理:
原型繼承并不是把父類的屬性和方法復(fù)制一份給子類,而是讓子類的原型和父類的原型之間搭建一個(gè)橋梁苹粟,以后子類可以通過原型鏈查找機(jī)制調(diào)取父類方法使用
2.call繼承
function Parent(){
this.x = 100
}
Parent.prototype.getX = function() {
console.log(this.x)
}
var p = new Parent()
function Child(){
// this:Child子類實(shí)例
Parent.call(this)
this.y = 100
}
var child = new Child();
讓Parent執(zhí)行有滑,方法中的this是子類的實(shí)例,在父類構(gòu)造函數(shù)中寫this.xx = xx嵌削,相當(dāng)于給子類實(shí)例增加了child.xx = xx
【原理】把父類構(gòu)造體中的私有屬性和方法毛好,原封不動(dòng)的復(fù)制一份給子類的實(shí)例
3.寄生組合式繼承
3-1、Object.create
Object.create([obj]):創(chuàng)建一個(gè)空對(duì)象苛秕,把[obj]作為新創(chuàng)建對(duì)象的原型
var obj = { name: '小明' }
var newObj = Object.create(obj)
newObj.__proto__ == obj
3-2 肌访、寄生組合繼承
讓子類繼承父類公有的(Object.create),子類繼承父類私有的(Parent.call(this))
function Parent(){
this.x = 100
}
Parent.prototype.getX = function() {
console.log(this.x)
}
var p = new Parent()
function Child(){
Parent.call(this)
this.y = 100
}
Child.prototype = Object.create(Parent.prototype);
//手動(dòng)添加構(gòu)造函數(shù)
Child.prototype.constructor = Child;
var child = new Child();
圖片表示一目了然