1. 程式人生 > >重學前端--js是面向對象還是基於對象?

重學前端--js是面向對象還是基於對象?

int con 面向 tab 狀態 即使 沒有 動態添加 屬性。

重學前端-面向對象

跟著winter老師一起,重新認識前端的知識框架

js面向對象或基於對象編程

以前感覺這兩個在本質上沒有什麽區別,面向對象和基於對象都是對一個抽象的對象擁有一系列的行為和狀態,本質都是對象層。拜讀了winter老師的音頻和文檔,頗有收獲。

對象:

  1. 一個可以觸摸或者可以看見的東西;
  2. 人的智力可以理解的東西;
  3. 可以指導思考或行動(進行想象或施加動作)的東西。

對象的特點:

  1. 對象具有唯一標識性:即使完全相同的兩個對象,也並非同一個對象。
  2. 對象有狀態:對象具有狀態,同一對象可能處於不同狀態之下。
  3. 對象具有行為:即對象的狀態,可能因為它的行為產生變遷。

面向對象編程的語言代表性的有Java、c++,他們都是把一個對象寫成一個類,有變量也有函數,事先定義好,通過get、set去設置或者獲取對應的屬性或者方法。而js的對象和這個稍微有個出入:當事先定義的對象未被聲明的屬性(變量或者方法)可以動態添加。也就是說,js的對象是動態的,而Java等的對象必須事先聲明,否則或在運行時報錯。所以js的面向對象比Java的面向對象更加的具有靈活性,但其實際都是面向對象進行編程

java其面向對象包含狀態和行為
js的面向對象則統稱為屬性,而屬性又分為數據屬性和訪問器屬性

數據屬性特征:
value:就是屬性的值。
writable:決定屬性能否被賦值。
enumerable:決定for in能否枚舉該屬性。
configurable:決定該屬性能否被刪除或者改變特征值

訪問器屬性特征:
getter:函數或undefined,在取屬性值時被調用。
setter:函數或undefined,在設置屬性值時被調用。
enumerable:決定for in能否枚舉該屬性。
configurable:決定該屬性能否被刪除或者改變特征值。

結語

要想理解JavaScript對象,必須清空我們腦子裏“基於類的面向對象”相關的知識,回到人類對對象的樸素認知和面向對象的語言無關基礎理論,我們就能夠理解JavaScript面向對象設計的思路。

重學前端--js是面向對象還是基於對象?