Es6中Class私有和受保護的屬性及方法

熟悉面向對象編程的都知道,面向對象編程最重要的原則之一 - 從外部接口劃分內部接口。也就是說,針對某一類事物,我們其實並不是那麼在乎其內部究竟是怎樣去實現的,只關心怎樣使用而已。

爲了理解這點,讓我們先來看看現實生活中的列子。通常,我們使用的設備非常複雜。但是從外部接口界定內部接口允許使用它們沒有什麼問題。列如一輛汽車。從外面看主要有:輪子、車身、車頂、方向盤等。
汽車外部組成

但是,內部...
汽車內部結構圖

有許多的細節,但是我們並不用去知道這些細節,也可以很好地開車車。

汽車非常可靠,不是嗎?我們可以使用很多年,只有在出現問題時才能使用它 - 進行維修。汽車的可靠性和使用的簡單性在於隱藏內部細節。

如果我們從汽車上取下發動機,那麼使用它將會複雜得多(安裝在哪?),並且危險(它可以電擊)。

所以,面向對象編程就類似於汽車一樣。

內部和外部接口

在面向對象的編程中,屬性和方法可以分爲兩組:

  • 內部接口-方法和屬性,可以從類的其他方法訪問,但不能從外部訪問
  • 外部接口-方法和屬性,也可以從外部訪問

如果我們繼續與汽車進行類比 - 內部隱藏的部分:發動機、變速器、半軸等 - 是其內部接口。對於對象的運行,內部接口是非常有用的,其細節互相使用。例如,彈性元件連接到減震器。

但是從外面看,汽車被外層車殼保護着,所以沒有人可以接觸到。細節隱藏且無法訪問。我們可以通過外部接口使用它的功能。所以,我們在使用一個對象的時候,並不關心它內部是怎樣工作的。

在JavaScript中,有兩種類型的對象字段(屬性和方法):

  • 公共的:隨處都可訪問,它們包含外部接口,我們在開發中一直常用的也就是公共的屬性和方法了
  • 私有的:僅在類的內部課訪問,主要用於內部接口

在許多其他語言中,還存在“受保護”字段:只能從類內部訪問和擴展它們。它們對內部接口也很有用。它們在某種意義上比私有更廣泛,因爲我們通常希望通過繼承類來獲取和訪問它們。

受保護的字段不是在JavaScript語言級別上實現的,但實際上它們非常方便,我們也可以模擬地去實現它們。現在我們用JavaScript來製作一臺具有這些類型屬性的汽車。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章