JavaScript 面向?qū)ο笕腴T

面向?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ù)組首元素的地址。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 原型概念 原型是什么? 原型對(duì)象是構(gòu)造函數(shù)在編譯階段,由系統(tǒng)為我們創(chuàng)建出來的一個(gè)對(duì)象。 執(zhí)行構(gòu)造函數(shù)代碼時(shí),js系...
    老95閱讀 290評(píng)論 1 1
  • JavaScript是一個(gè)動(dòng)態(tài)的通用面向?qū)ο缶幊陶Z言,所有的現(xiàn)代Web瀏覽器均包含了JavaScript解釋器,這...
    涼風(fēng)有興閱讀 564評(píng)論 0 4
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 12,556評(píng)論 6 13
  • 博客內(nèi)容:什么是面向?qū)ο鬄槭裁匆嫦驅(qū)ο竺嫦驅(qū)ο缶幊痰奶匦院驮瓌t理解對(duì)象屬性創(chuàng)建對(duì)象繼承 什么是面向?qū)ο?面向?qū)ο?..
    _Dot912閱讀 1,545評(píng)論 3 12
  • 前言 人生苦多,快來 Kotlin ,快速學(xué)習(xí)Kotlin! 什么是Kotlin? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,762評(píng)論 9 118

友情鏈接更多精彩內(nèi)容