1. 程式人生 > >JS面向對象基礎

JS面向對象基礎

除了 首字母 分類 sql 抽象 翻譯 實例 多少 科技類

面向對象概念

一、 編程範式

在我們編程語言裏面,大致可以分為兩個大類:命令式編程 聲明式編程

  1. 命令式編程

所謂命令式編程,就是以命令為主,給計算機一條一條命令,計算機來按照我們給的命令原封不動的執行。

命令機器如何去做事情(how)

常見的命令式編程語言有:C語言,C++C#JavaPHPRuby

從命令式編程語言又可以分為兩大類:面向過程 面向對象

(1) 面向過程

就是分析解決問題所需要的步驟,然後把這些步驟一步一步實現

(2) 面向對象

所謂面向對象,就是將程序裏面的模型看做一個一個的對象。對象和對象之間會產生彼此的聯系。使用對象來解決問題

需要註意:就算是面向對象編程,裏面也會有面向過程的步驟。

  1. 聲明式編程

所謂聲明式編程,就是指告訴計算機你想要什麽(what),讓機器去解決如何實現。

聲明式編程裏面也可以分為兩大類:DSL 和 函數式編程

(1) DSL

DSL翻譯成中文為領域專用語言(Domain Specific Language)。顧名思義,就是指某一個領域專用的語言。

常見的DSL語言有HTMLCSSSQL

(2) 函數式編程

將程序裏面的一些模型看做是數學裏面的函數來進行計算。

二、 面向對象

  1. 什麽是面向對象

首先需要搞清楚什麽是對象(Object)。通俗來講,就是東西。我們這個世界就是由各種各種的東西組成的。東西與東西之間有彼此的聯系。

現實生活中我們描述一個東西,或者一個物品的時候,常常會從

2個方面來進行描述

例如我要描述一個手機

首先第一個就是外觀(屬性):白色 5.5寸 矩形

接下來就是從功能來進行描述:看電影 打電話 玩遊戲

  1. 面向對象和面向過程的區別

面向過程的特點:由頂自下,依次執行,我們需要去考慮每一個步驟。

面向對象的特點:面向對象更加符合我們人類的思想。我們只需要找到我們需要的對象即可。

ATM機取錢

面向過程:我們需要考慮每一個步驟,例如取錢的時候金額是多少,余額是多少,用戶的輸入是否合法

面向對象:只需要考慮這個ATM這個對象即可

  1. 面向對象的特點

一般來講,面向對象的特點有3個:封裝,繼承和多態

有些老的教材,會告訴你面向對象的特點有4個:除了上面

3個以外,還多加了一個抽象

封裝:就是將細節隱藏起來,不向外部暴露。例如現實生活中電視機就是一個典型的封裝,無法看到內部電子元件這些細節

繼承:和現實生活中一樣,兒子可以繼承父親的一些東西。在程序裏面子類可以繼承父類。

多態:如果從語言的角度來看,就是不同對象同一方法的作用不一樣。例如現實生活中,一個action這個單詞對於不同的職業的人來講,意義是不一樣的。

和現實生活中一樣,東西一多,按照人的思維自然就會想到分類。比如給你1萬本書。我們首先會想到分類,例如分為小說類,科技類,漫畫類,政治類,經濟類...每一個類別下面的書都是有共同的特點的。

類和對象的關系:類是對象的一種概括,是一個抽象的東西,對象是類的一種具體實現,是一個具體的東西。

  1. 創建對象

(1) 通用編程語言產生對象的方式

對象是從類產生的。所以如果我們要獲取對象,首先需要創建類

例如:PHP裏面創建類和對象的方式

既然對象是從類裏面實例化出來的,那麽首先需要有類

接下來我們就可以從類裏面產生具體的對象了

(2) JS中創建對象的方式

ES6之前,JS裏面沒有類的概念。所以在ES6之前都是通過函數來模擬類

模擬類的函數通常被稱之為構造函數。為了區分構造函數和普通函數,有一個不成文的規定,構造函數的函數名首字母大寫

對象和構造函數,以及原型對象之間的關系圖(重要)

前面我們所講述的數組,函數,數字,字符串等都有對應的構造函數。如果是通過構造函數實例化的,那麽就是一個對象

對象裏面有一個叫做constructor的屬性,可以查看到這個對象的構造函數

在每一個構造函數裏面,都有一個隱藏屬性,叫做prototype,這個屬性指向一個對象,這個對象就是通過構造函數實例化出來的對象的原型對象

構造函數。

JS面向對象基礎