1、什麼是面向對象程序員
對象並非計算機領域憑空造出來的概念,它是順着人類思惟模式產生的一種抽象,面向對象編程也被認爲是:更接近人類思惟模式的一種編程範式。編程
對象有以下幾個特徵:編程語言
在JavaScript中,任何不一樣的 JavaScript 對象實際上是互不相等的。關於對象的「狀態和行爲」,JavaScript 中的行爲和狀態都能用屬性來抽象。函數
JavaScript還有其獨有的特色:對象具備高度的動態性,這是由於 JS 賦予了使用者在運行時爲對象添改狀態和行爲的能力。性能
JavaScript有兩種屬性:數據屬性和訪問器屬性。this
數據屬性:prototype
訪問器屬性:(建立對象時可使用get和set關鍵字來建立訪問器屬性)設計
2、JavaScript的原型系統對象
在不一樣的編程語言中,設計者也利用各類不一樣的語言特性來抽象描述對象。最爲成功的流派是使用「類」的方式來描述對象,這誕生了諸如 C++、Java 等流行的編程語言。這個流派叫作基於類的編程語言。還有一種就是基於原型的編程語言,它們利用原型來描述對象,好比JavaScript。ip
從 ES6 開始,JavaScript 提供了 class 關鍵字來定義類,這樣的方案仍然是基於原型運行時系統的模擬。
JavaScript 的原型:若是全部對象都有私有字段 [[prototype]],就是對象的原型;讀一個屬性,若是對象自己沒有,則會繼續訪問對象的原型,直到原型爲空或者找到爲止。
從 ES6 以來,JavaScript 提供了一系列內置函數,以便更爲直接地訪問操縱原型。三個方法分別爲:
在 ES3 和以前的版本中,「類」的定義是一個私有屬性 [[class]],其訪問方式是 Object.prototype.toString。
在 ES5 開始,[[class]] 私有屬性被 Symbol.toStringTag 代替,Object.prototype.toString 的意義從命名上再也不跟 class 相關。
new 操做在建立對象的時候具體作了哪些事情:
new 這樣的行爲,試圖讓函數對象在語法上跟類變得類似,可是,它客觀上提供了兩種方式,一是在構造器中添加屬性,二是在構造器的 prototype 屬性上添加屬性。
ES6 中引入了 class 關鍵字,而且在標準中刪除了全部 [[class]] 相關的私有屬性描述,類的概念正式從屬性升級成語言的基礎設施,今後,基於類的編程方式成爲了 JavaScript 的官方編程範式。咱們經過 get/set 關鍵字來建立 getter,經過括號和大括號來建立方法,數據型成員最好寫在構造器裏面。