javascript面向對象

  • 通常認爲,js是面向過程模型的語言,不少前端開發者,也偏向以面向過程的方式編寫代碼,其實在ECMA中是這樣定義過對象(object)的,「屬性的無序集合,每一個屬性存放一個原始值、對象或函數」。嚴格來講,這意味着對象是無特定順序的值的數組。其中的屬性或方法都有一個名字,根據這個名字能夠訪問相映射的值(值能夠是基本值/對象/方法)。
  • 在其餘的類語言中,對象實際上是基於模板來建立的,經過定義一個類做爲對現實的抽象,而後由類來實例化對象;而在原型語言(好比js)中,對象是以經過克隆另外一個對象的方式建立,被克隆的母體稱爲原型對象。

建立對象的幾中方式:

1.工廠模式
圖片描述前端

2.構造函數式數組

圖片描述

3.原型模式函數

圖片描述

4.構造函數及原型模式的組合式spa

圖片描述

幾種方式的對比

1.工廠模式設計

  • 能夠傳遞參數,但缺點是沒法識別對象類型,由於建立對象都是使用Object的原生構造函數來完成的。

2.構造函數式對象

  • 缺點是在建立對象時,特別針對對象的屬性指向函數時,會重複的建立函數實例。

3.原型模式blog

  • 缺點是省略了爲構造函數傳遞初始化參數,這在必定程序帶來不便;另外,最主要是當對象的屬性是引用類型時,它的值是不變的,老是引用同一個外部對象,全部實例對該對象的操做都會其它實例。

4.構造函數及原型模式的組合式圖片

  • 最爲經常使用的定義類型方式,結合構造函數模式與原型模式的優勢。構造函數模式用於定義實例的屬性,而原型模式用於定義方法和共享的屬性。結果,每一個實例都會有本身的一份實例屬性的副本,但同時又共享着對方方法的引用,最大限度的節約內存。此外,組合模式還支持向構造函數傳遞參數,可謂是集兩家之所長。

注:以上內容參考《JavaScript 高級程序設計》ip

相關文章
相關標籤/搜索