問題
JS中的面向對象、原型繼承等特性不一樣於Java等其餘面嚮對象語言,初看起來很是怪異:javascript
- 爲何JS中有new操做符、構造函數,卻沒有類?
- 爲何JS中使用原型,用原型來模擬類和繼承看起來很彆扭?
參考了講述JS誕生歷史的幾篇文章後,我總算了解這些特性的來歷,簡單總結以下。html
JS誕生狀況
- Brendan Eich(JS發明者)要在10天內完成JS的設計,任務時間緊迫。
- JS的初衷只是用於表單檢驗、狀態欄滾動消息等簡單功能,設計要簡單輕量傻瓜,Brendan Eich並未預料到往後JS會如此流行、重量化、複雜化。
- 出於網景公司的高層命令和營銷考慮,JS要像Java但又不能太像,要作一個傻瓜式的、用在網頁中的類Java小弟腳本語言。
- 除了Java,Brendan Eich出於設計考慮、我的興趣等緣由還借鑑了C、Scheme、Self等語言。
JS語言特性來歷
瞭解了JS的誕生,JS爲何是這個樣子的也就一目瞭然了:java
- 基本語法,如花括號、分號、關鍵字等 —— 借鑑C。
- 對象、構造函數、new操做符 —— 借鑑Java。
- 沒有類 —— 不能太像Java,不必複雜化。
- 函數是一等公民 —— 借鑑Scheme。
- 原型 —— 借鑑Self。
參考文章