JS面向對象基礎
面向對象概念
一、 編程範式
在我們編程語言裏面,大致可以分為兩個大類:命令式編程 和 聲明式編程
- 命令式編程
所謂命令式編程,就是以命令為主,給計算機一條一條命令,計算機來按照我們給的命令原封不動的執行。
命令機器如何去做事情(how)
常見的命令式編程語言有:C語言,C++,C#,Java,PHP,Ruby
從命令式編程語言又可以分為兩大類:面向過程 和 面向對象
(1) 面向過程
就是分析解決問題所需要的步驟,然後把這些步驟一步一步實現
(2) 面向對象
所謂面向對象,就是將程序裏面的模型看做一個一個的對象。對象和對象之間會產生彼此的聯系。使用對象來解決問題
需要註意:就算是面向對象編程,裏面也會有面向過程的步驟。
- 聲明式編程
所謂聲明式編程,就是指告訴計算機你想要什麽(what),讓機器去解決如何實現。
聲明式編程裏面也可以分為兩大類:DSL 和 函數式編程
(1) DSL
DSL翻譯成中文為領域專用語言(Domain Specific Language)。顧名思義,就是指某一個領域專用的語言。
常見的DSL語言有HTML,CSS,SQL
(2) 函數式編程
將程序裏面的一些模型看做是數學裏面的函數來進行計算。
二、 面向對象
- 什麽是面向對象
首先需要搞清楚什麽是對象(Object)。通俗來講,就是東西。我們這個世界就是由各種各種的東西組成的。東西與東西之間有彼此的聯系。
現實生活中我們描述一個東西,或者一個物品的時候,常常會從
例如我要描述一個手機
首先第一個就是外觀(屬性):白色 5.5寸 矩形
接下來就是從功能來進行描述:看電影 打電話 玩遊戲
- 面向對象和面向過程的區別
面向過程的特點:由頂自下,依次執行,我們需要去考慮每一個步驟。
面向對象的特點:面向對象更加符合我們人類的思想。我們只需要找到我們需要的對象即可。
ATM機取錢
面向過程:我們需要考慮每一個步驟,例如取錢的時候金額是多少,余額是多少,用戶的輸入是否合法
面向對象:只需要考慮這個ATM這個對象即可
- 面向對象的特點
一般來講,面向對象的特點有3個:封裝,繼承和多態
有些老的教材,會告訴你面向對象的特點有4個:除了上面
封裝:就是將細節隱藏起來,不向外部暴露。例如現實生活中電視機就是一個典型的封裝,無法看到內部電子元件這些細節
繼承:和現實生活中一樣,兒子可以繼承父親的一些東西。在程序裏面子類可以繼承父類。
多態:如果從語言的角度來看,就是不同對象同一方法的作用不一樣。例如現實生活中,一個action這個單詞對於不同的職業的人來講,意義是不一樣的。
- 類
和現實生活中一樣,東西一多,按照人的思維自然就會想到分類。比如給你1萬本書。我們首先會想到分類,例如分為小說類,科技類,漫畫類,政治類,經濟類...每一個類別下面的書都是有共同的特點的。
類和對象的關系:類是對象的一種概括,是一個抽象的東西,對象是類的一種具體實現,是一個具體的東西。
- 創建對象
(1) 通用編程語言產生對象的方式
對象是從類產生的。所以如果我們要獲取對象,首先需要創建類
例如:PHP裏面創建類和對象的方式
既然對象是從類裏面實例化出來的,那麽首先需要有類
接下來我們就可以從類裏面產生具體的對象了
(2) JS中創建對象的方式
在ES6之前,JS裏面沒有類的概念。所以在ES6之前都是通過函數來模擬類
模擬類的函數通常被稱之為構造函數。為了區分構造函數和普通函數,有一個不成文的規定,構造函數的函數名首字母大寫
對象和構造函數,以及原型對象之間的關系圖(重要)
前面我們所講述的數組,函數,數字,字符串等都有對應的構造函數。如果是通過構造函數實例化的,那麽就是一個對象
對象裏面有一個叫做constructor的屬性,可以查看到這個對象的構造函數
在每一個構造函數裏面,都有一個隱藏屬性,叫做prototype,這個屬性指向一個對象,這個對象就是通過構造函數實例化出來的對象的原型對象
構造函數。
JS面向對象基礎