面向?qū)ο蟮母拍?/b>
1、概念:
?????? 從編程思想角度理解:面向過程的編程思想,關(guān)注解決問題的步驟;面向?qū)ο蟮木幊趟枷?,關(guān)注的是解決問題所需的對(duì)象。面向?qū)ο蟮木幊趟枷肜^承自面向過程。
現(xiàn)有的兩種程序思想:
????? 面向過程:關(guān)注的是解決問題的步驟
??????????? 優(yōu)點(diǎn):在小型程序中代碼量量?比較少,開發(fā)成本低
??????????? 缺點(diǎn):在構(gòu)建大型項(xiàng)目時(shí),代碼邏輯不易捋順、代碼量太大、程序編寫繁瑣,增加開發(fā)? 難度。
???? 面向?qū)ο螅宏P(guān)注的是解決問題所需的對(duì)象
??????????? 優(yōu)點(diǎn):有效彌補(bǔ)了面向過程編程思想的不足。
??????????? 缺點(diǎn):在小型程序中不如面向過程思想靈活、方便。
??????????? 從編程語言角度理解:面向?qū)ο蟮木幊陶Z言,必須有“類”和“對(duì)象”這兩個(gè)概念,并且對(duì)象是經(jīng)由類創(chuàng)建出來的;還需要有封裝、繼承、多態(tài)三個(gè)特征(如:Java語言)。
??????????? JS語言不符合以上條件,但是有“對(duì)象”的概念,所以它是一門基于對(duì)象的編程語言。即JS不是一種面向?qū)ο蟮木幊陶Z言。
2、js和面向?qū)ο蟮年P(guān)系:
??????????? 利用面向?qū)ο缶幊趟枷雭碇笇?dǎo)js代碼的書寫方式。
?? 創(chuàng)建
?? 1>、字面量的方式(直接創(chuàng)建)
????????????? 語法:var對(duì)象名= {屬性名1:屬性值,
?????????????? 屬性名2:屬性值,
????????????? 方法名:匿名函數(shù)};
???????????? 例如:

???????????? 優(yōu)勢(shì):快捷、直觀、方便
???????????? 劣勢(shì):需要?jiǎng)?chuàng)建多個(gè)對(duì)象時(shí),代碼冗余
??? 2>、工廠模式(使用函數(shù)創(chuàng)建)
???????? 語法:
?????????????? function函數(shù)名(形參列表) {
???????????????????? var 對(duì)象名 = {};
???????????????????? 對(duì)象名.屬性名=參數(shù)1;
???????????????????? 對(duì)象名.屬性名=參數(shù)2;
????????????????????? 對(duì)象名.方法名=function (){
?????????????????????????? 操作;
??????????????????????? };
??????????????????? return? 對(duì)象名;
??????????????????? }
?? 例如:

??????? 優(yōu)勢(shì):解決了了代碼冗余的問題
? ? ? 劣勢(shì):無法區(qū)分該對(duì)象的類型(如:系統(tǒng)類型,如number是Number()創(chuàng)建的,但是自定義類型無法獲取到,即? 無法利用instanceof判定對(duì)象的歸屬關(guān)系)
3>、使用構(gòu)造函數(shù)(函數(shù)名首字母?寫)
??? 語法:
???? function? 構(gòu)造函數(shù)名 (形參列表)? {
??????????? ? ?? this.屬性名 = 參數(shù)1;
??????? ? ?? ?? this.屬性名 = 參數(shù)2;
?????????? ? ?? this.方法名=function (){
???????????????? 操作;
?????????????? };
??????????? }
例如:

???? 優(yōu)勢(shì):解決了獲取對(duì)象類型的問題,使用構(gòu)造函數(shù)創(chuàng)建的對(duì)象自帶一個(gè)constructor,通過該屬性獲取對(duì)象的類型(還可以使用instanceof檢測(cè)對(duì)象是那個(gè)類型,
???? 實(shí)例:(person?? instanceof???? Person) ,? 返回?個(gè)布爾值)。
???? 劣勢(shì):內(nèi)存占用有點(diǎn)大。
4>、工廠模式和構(gòu)造函數(shù)創(chuàng)建對(duì)象的區(qū)別
???? 1、在函數(shù)中沒有顯式的創(chuàng)建新對(duì)象
???? 2、直接把屬性、方法賦值給了this指針
???? 3、沒有return語句
5>、使用構(gòu)造函數(shù)創(chuàng)建出來的對(duì)象可以標(biāo)識(shí)這個(gè)對(duì)象屬于哪一種類型。
6>、普通函數(shù)調(diào)用和構(gòu)造函數(shù)調(diào)用的區(qū)別
???????? 必須使用new操作符來創(chuàng)建新對(duì)象,如果像調(diào)用普通函數(shù)那樣創(chuàng)建對(duì)象,
????????? 就是在全局作用域中調(diào)用函數(shù)了,this指針會(huì)指向window對(duì)象
訪問對(duì)象的屬性與方法
???? 訪問屬性
?1、點(diǎn)語法和[]訪問某?個(gè)屬性
???????? 1》使用點(diǎn)語法訪問屬性,點(diǎn)后直接跟屬性名;
???????? 2》使用[]訪問屬性,[]里是屬性字符串(必須是字符串類型的數(shù)據(jù))或保存屬性名字符串的變量
例如:

2、使用for...in...遍歷對(duì)象的所有屬性(查詢)


3、刪除屬性
????????? 代碼:

????? 運(yùn)行結(jié)果:

4、 訪問方法
??? 語法:對(duì)象名.方法名();

5、增加屬性:

附加:
???????????? 1、數(shù)組名:代表數(shù)組首元素的地址。