面向對象編程(OPP)

做者:狐狸家的魚html

本文連接:面向對象編程
git

GitHub:sueRimngithub

面向對象編程(OPP)

具備靈活、代碼可複用、高度模塊化等特色,易維護和開發編程

實例對象與new命令

1.對象

  • 對象是單個實物的抽象
  • 對象是一個容器,封裝了屬性(prototype)和方法(method)
    • 屬性是對象的狀態
    • 方法是對象的行爲

2.構造函數

JavaScript使用構造函數做爲對象的模板,描述實例對象的基本結構數組

定義app

  • 專門用來生成實例對象的函數
  • 第一個字母一般大寫

特色模塊化

  • 函數體內部使用了this關鍵字,表明所要生成的對象實例
  • 生成對象的時候,必須使用new命令

3.new命令

基本用法函數

  • new命令的做用就是執行構造函數,返回一個實例對象this

  • 根據須要,構造函數也能夠接受參數 原理prototype

  • 使用new命令時,它後面的函數依次執行下面的步驟

    • 1.建立一個空對象,做爲將要返回的對象實例
    • 2.將這個空對象的原型,指向構造函數的prototype屬性
    • 3.將這個空對象賦值給函數內部的this關鍵字
    • 4.開始執行構造函數內部的代碼
  • 構造函數內部,this指的是一個新生成的空對象 new.target

    若是當前函數是new命令調用,new.target指向當前函數,不然爲undefined

4.this關鍵字

涵義

  • 能夠用在構造函數中,表示實例對象
  • 它老是返回一個對象
  • this就是屬性或方法「當前」所在的對象
  • 因爲對象的屬性能夠賦給另外一個對象,因此屬性所在的當前對象是可變的,即this的指向是可變的

使用場合

  • 全局環境:this指的就是頂層對象window
  • 構造函數:this指的是實例對象
  • 對象的方法:this指的就是方法運行時所在的對象

使用注意點

  • 避免多層this
    • 解決方法:使用一個固定this的值,而後內層函數調用這個變量 var that = this
  • 避免數組處理方法中的this
    • 數組的mapforEach方法,運行提供一個函數做爲參數。這個函數內部不該該使用this
    • 解決方法
      • 1.var that = this
      • 2.將this看成forEach方法的第二個參數,固定它的運行環境
  • 避免回調函數中的this

綁定this的方法

  • Function.prototype.call()
    • 能夠指定函數內部this的指向(即函數執行時所在的做用域),而後在所指定的做用域內,調用該函數
    • call方法的參數,應該是一個對象。若是參數爲空、nullundefined,則默認傳入全局對象
    • call方法能夠接受多個參數。第一個參數就是this所要指向的那個對象,後面的參數則是函數調用時所需的參數
  • Function.prototype.apply()
    • 它與call的惟一區別就是,它接收一個數組做爲函數執行時的參數
    • apply方法的第一個參數也是this所要指向的那個對象,若是設爲nullundefined,則等同於指定全局對象
    • 第二個參數則是一個數組,該數組的全部成員依次做爲參數,傳入原函數
    • 原函數的參數,在call方法中必須一個個添加,可是在apply方法中,必須以數組形式添加
    • 應用
      • 1.找出數組的最大元素:結合使用apply方法和Math.max方法
      • 2.將數組的空元素變爲undefined
      • 3.轉換相似數組的對象:利用數組對象的slice方法,能夠將一個相似數組的對象(好比arguments對象)轉爲真正的數組
      • 4.綁定回調函數的對象
  • Function.prototype.bind()
    • 用於將函數體內的this綁定到某個對象,而後返回一個新函數
    • 使用注意點
      • 1.每一次返回一個新函數
      • 2.結合回調函數使用
      • 3.結合call方法使用

5.對象的繼承

原型對象

構造函數的缺點是同一個構造函數的多個實例之間,沒法共享屬性,從而形成對系統資源的浪費。解決方法:使用prototype

prototype屬性的做用就是:JavaScript 繼承機制的設計思想就是,原型對象的全部屬性和方法,都能被實例對象共享原型對象的做用就是定義全部實例對象共享的屬性和方法

原型鏈

因爲原型對象也是對象,因此它也有本身的原型,對象到原型,再到原型的原型……

  • 全部對象都繼承了Object.prototype的屬性
  • Object.prototype的原型是null,原型鏈的盡頭就是null
  • Object.getPrototypeOf方法返回參數對象的原型

constructor屬性

prototype對象有一個constructor屬性,默認指向prototype對象所在的構造函數,能夠被全部實例對象繼承

相關文章
相關標籤/搜索