js封裝 繼承 多型

2022-05-23 17:30:12 字數 3516 閱讀 5161

所謂封裝,也就是把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法只讓可信的類或者物件操作,對不可信的進行資訊隱藏。封裝是物件導向的特徵之一,是物件和類概念的主要特性。 簡單的說,乙個類就是乙個封裝了資料以及操作這些資料的**的邏輯實體。在乙個物件內部,某些**或某些資料可以是私有的,不能被外界訪問。通過這種方式,物件對內部資料提供了不同級別的保護,以防止程式中無關的部分意外的改變或錯誤的使用了物件的私有部分。

我們在vue專案中使用混入將公有**提出來,混入到每個需要的元件中,讓我們的**更簡潔

我們也可以將一些公用的方法,工具進行封裝,達到**復用,讓我們的**更簡潔

所謂繼承是指可以讓某個型別的物件獲得另乙個型別的物件的屬性的方法。它支援按級分類的概念。繼承是指這樣一種能力:它可以使用現有類的所有功能,並在無需重新編寫原來的類的情況下對這些功能進行擴充套件。 通過繼承建立的新類稱為「子類」或「派生類」,被繼承的類稱為「基類」、「父類」或「超類」。繼承的過程,就是從一般到特殊的過程。要實現繼承,可以通過「繼承」(inheritance)和「組合」(composition)來實現。繼承概念的實現方式有二類:實現繼承與介面繼承。實現繼承是指直接使用基類的屬性和方法而無需額外編碼的能力;介面繼承是指僅使用屬性和方法的名稱、但是子類必須提供實現的能力;

function a ()

function b()

let d = new b()

console.log(d.c) // 111

上面**相當於函式b繼承了函式a的私有屬性,通過改變父類的this實現繼承

function a ()

a.prototype.getname=function()

function b()

b.prototype=new a()

b.constructor=b

let d = new b()

console.log(d.c) // 111

console.log(d.getname()) // 你好

原型繼承通過將父類的例項賦值給子類的原型,這種方法子類可以繼承父類的私有方法也可以繼承父類的私有方法

function a ()

a.prototype.getname=function()

function b()

b.prototype=object.create(a.prototype)

let d = new b()

console.log(d.c) // 111

console.log(d.getname()) // 你好

寄生組合繼承就是使用call繼承改變this,實現私有繼承私有,使用object.create實現公有繼承公有

class parent

name()

}class child extends parent

let a = new child()

console.log(a.a) // 1

console.log(a.name()) // 2

這裡通過關鍵字extends實現子類繼承父類的私有和公有,這裡需要注意如果子類裡面寫了constructor,就必須寫super否則會報錯

class parent

name()

}class child extends parent

}// ncaught referenceerror: must call super constructor in derived class before accessing 'this' or returning from derived constructor at new child

所謂多型就是指乙個類例項的相同方法在不同情形有不同表現形式。多型機制使具有不同內部結構的物件可以共享相同的外部介面。這意味著,雖然針對不同物件的具體操作不同,但通過乙個公共的類,它們(那些操作)可以通過相同的方式予以呼叫。

函式過載是指在同一作用域內,可以有一組具有相同函式名,不同引數列表的函式,這組函式被稱為過載函式。過載函式通常用來命名一組功能相似的函式,這樣做減少了函式名的數量,避免了名字空間的汙染,對於程式的可讀性有很大的好處。

// 可以跟據arguments個數實現過載

function add()

return sum;

}console.log(add()) // 0

console.log(add(1,2)) // 3

console.log(add(1,2,3)) // 6

「例項中的指標僅指向原型,而不是指向建構函式」。

「重寫原型物件切斷了現有原型與任何之前已經存在的物件例項之間的關係;它們引用的仍然是最初的原型」。

var parent = function(name,age)

parent.prototype.showproper = function()

var child = function(name,age)

// inheritance

child.prototype = object.create(parent.prototype);

// child.prototype = new parent();

child.prototype.constructor = child;

// rewrite function

child.prototype.showproper = function()

var obj = new child('wozien','22');

obj.showproper();

上面這段**通過使用寄生組合繼承,實現子類私有繼承父類私有,子類公有繼承父類公有,達到重寫父類的showproper

單一職責原則就是我們說的乙個方法只做一件事,就比如現在的專案結構,就遵循了單一職責原則

開放封閉原則就是對修改關閉,對擴充套件開放

class a 

} class b extends a

let c = new b()

console.log(c.add()) // 111

我們可以使用extends繼承父類,可以再b裡面修改add函式,實現對修改關閉,對擴充套件開放

JS多型封裝繼承

js是一種基於物件的語言,在js中幾乎所有的東西都可以看成是乙個物件,但是js中的物件模型和大多數物件導向語言的物件模型不太一樣,因此理解js中物件導向思想十分重要,接下來本篇文章將從多型 封裝 繼承三個基本特徵來理解js的物件導向思想 同一操作作用於不同的物件上面,可以產生不同的解釋和不同的執行結...

封裝,繼承,多型

一 1 封裝 該隱藏隱藏,該公開的公開 屬性隱藏,同時提供get set方法 有些方法應該隱藏 方法宣告公開,實現隱藏。實現的改變對架構的影響最小 2 繼承 一般 特殊 單繼承 乙個類最多只能有乙個直接父類。類之間可以形成樹狀關係 根據訪問許可權,子類如果可以訪問父類的屬性和方法,就能繼承 priv...

繼承 封裝 多型

一 封裝 封裝是實現物件導向程式設計的第一步,封裝就是將資料或函式等集合在乙個個的單元中 我們稱之為類 被封裝的物件通常被稱為抽象資料型別。封裝的意義 封裝的意義在於保護或者防止 資料 被我們無意中破壞。在物件導向程式設計中資料被看作是乙個中心的元素並且和使用它的函式結合的很密切,從而保護它不被其它...