JavaScript 面向對象入門

面向對象的概念

1、概念:

?????? 從編程思想角度理解:面向過程的編程思想,關注解決問題的步驟;面向對象的編程思想,關注的是解決問題所需的對象。面向對象的編程思想繼承自面向過程。

現有的兩種程序思想:

????? 面向過程:關注的是解決問題的步驟

??????????? 優點:在小型程序中代碼量量?比較少,開發成本低

??????????? 缺點:在構建大型項目時,代碼邏輯不易捋順、代碼量太大、程序編寫繁瑣,增加開發? 難度。

???? 面向對象:關注的是解決問題所需的對象

??????????? 優點:有效彌補了面向過程編程思想的不足。

??????????? 缺點:在小型程序中不如面向過程思想靈活、方便。

??????????? 從編程語言角度理解:面向對象的編程語言,必須有“類”和“對象”這兩個概念,并且對象是經由類創建出來的;還需要有封裝、繼承、多態三個特征(如:Java語言)。

??????????? JS語言不符合以上條件,但是有“對象”的概念,所以它是一門基于對象的編程語言。即JS不是一種面向對象的編程語言。

2、js和面向對象的關系:

??????????? 利用面向對象編程思想來指導js代碼的書寫方式。

?? 創建

?? 1>、字面量的方式(直接創建)

????????????? 語法:var對象名= {屬性名1:屬性值,

?????????????? 屬性名2:屬性值,

????????????? 方法名:匿名函數};

???????????? 例如:

???????????? 優勢:快捷、直觀、方便

???????????? 劣勢:需要創建多個對象時,代碼冗余

??? 2>、工廠模式(使用函數創建)

???????? 語法:

?????????????? function函數名(形參列表) {

???????????????????? var 對象名 = {};

???????????????????? 對象名.屬性名=參數1;

???????????????????? 對象名.屬性名=參數2;

????????????????????? 對象名.方法名=function (){

?????????????????????????? 操作;

??????????????????????? };

??????????????????? return? 對象名;

??????????????????? }

?? 例如:

??????? 優勢:解決了了代碼冗余的問題

? ? ? 劣勢:無法區分該對象的類型(如:系統類型,如number是Number()創建的,但是自定義類型無法獲取到,即? 無法利用instanceof判定對象的歸屬關系)

3>、使用構造函數(函數名首字母?寫)

??? 語法:

???? function? 構造函數名 (形參列表)? {

??????????? ? ?? this.屬性名 = 參數1;

??????? ? ?? ?? this.屬性名 = 參數2;

?????????? ? ?? this.方法名=function (){

???????????????? 操作;

?????????????? };

??????????? }

例如:

???? 優勢:解決了獲取對象類型的問題,使用構造函數創建的對象自帶一個constructor,通過該屬性獲取對象的類型(還可以使用instanceof檢測對象是那個類型,

???? 實例:(person?? instanceof???? Person) ,? 返回?個布爾值)。

???? 劣勢:內存占用有點大。

4>、工廠模式和構造函數創建對象的區別

???? 1、在函數中沒有顯式的創建新對象

???? 2、直接把屬性、方法賦值給了this指針

???? 3、沒有return語句

5>、使用構造函數創建出來的對象可以標識這個對象屬于哪一種類型。

6>、普通函數調用和構造函數調用的區別

???????? 必須使用new操作符來創建新對象,如果像調用普通函數那樣創建對象,

????????? 就是在全局作用域中調用函數了,this指針會指向window對象

訪問對象的屬性與方法

???? 訪問屬性

?1、點語法和[]訪問某?個屬性

???????? 1》使用點語法訪問屬性,點后直接跟屬性名;

???????? 2》使用[]訪問屬性,[]里是屬性字符串(必須是字符串類型的數據)或保存屬性名字符串的變量

例如:


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

3、刪除屬性

????????? 代碼:

????? 運行結果:


4、 訪問方法

??? 語法:對象名.方法名();

5、增加屬性:

附加:

???????????? 1、數組名:代表數組首元素的地址。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 原型概念 原型是什么? 原型對象是構造函數在編譯階段,由系統為我們創建出來的一個對象。 執行構造函數代碼時,js系...
    老95閱讀 251評論 1 1
  • JavaScript是一個動態的通用面向對象編程語言,所有的現代Web瀏覽器均包含了JavaScript解釋器,這...
    涼風有興閱讀 507評論 0 4
  • 國家電網公司企業標準(Q/GDW)- 面向對象的用電信息數據交換協議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 11,150評論 6 13
  • 博客內容:什么是面向對象為什么要面向對象面向對象編程的特性和原則理解對象屬性創建對象繼承 什么是面向對象 面向對象...
    _Dot912閱讀 1,449評論 3 12
  • 前言 人生苦多,快來 Kotlin ,快速學習Kotlin! 什么是Kotlin? Kotlin 是種靜態類型編程...
    任半生囂狂閱讀 26,276評論 9 118