JavaScript 物件設計模式

2021-09-01 20:39:45 字數 1968 閱讀 2627

原始的方式:建立物件,然後給它設定幾個屬性

函式建立物件方法:解決原始的方式每建立乙個例項都需要建立乙個原始的方式

函式建立物件方法傳遞引數:讓上面的函式建立物件方法可以傳遞屬性

函式建立物件方法傳遞函式方法:工廠函式外定義物件的方法,然後通過屬性指向該方法

function

showcolor()

function

createcar

(scolor,idoors,impg)

var ocar1 =

createcar

("red",4

,23);

var ocar2 =

createcar

("blue",3

,25);

ocar1.

showcolor()

;//輸出 "red"

ocar2.

showcolor()

;//輸出 "blue"

第一步選擇類名,即建構函式的名字。根據慣例,這個名字的首字母大寫,以使它與首字母通常是小寫的變數名分開。除了這點不同,建構函式看起來很像工廠

與工廠方式區別:建構函式內沒有建立物件,而是使用 this 關鍵字。使用 new 運算子建構函式時,在執行第一行**前先建立乙個物件,只有用 this 才能訪問該物件。然後可以直接賦予 this 屬性,預設情況下是建構函式的返回值(不必明確使用 return 運算子)。

function

car(scolor,idoors,impg);}

var ocar1 =

newcar

("red",4

,23);

var ocar2 =

newcar

("blue",3

,25);

利用了物件的 prototype 屬性,可以把它看成建立新物件所依賴的原型

原型方式的問題:

必須在物件建立後才能改變屬性的預設值

屬性指向的是物件,而不是函式時。函式共享不會造成問題,但物件卻很少被多個例項共享(物件改變大家都改變)

混合的建構函式/原型方式(解決原型方式問題)

動態原型方法

混合工廠方式

用建構函式定義物件的所有非函式屬性,用原型方式定義物件的函式屬性(方法)。結果是,所有函式都只建立一次,而每個物件都具有自己的物件屬性例項。

function

car(scolor,idoors,impg)

car.prototype.

showcolor

=function()

;var ocar1 =

newcar

("red",4

,23);

var ocar2 =

newcar

("blue",3

,25);

ocar1.drivers.

push

("bill");

alert

(ocar1.drivers)

;//輸出 "mike,john,bill"

alert

(ocar2.drivers)

;//輸出 "mike,john"

現在就更像建立一般物件了。所有的非函式屬性都在建構函式中建立,意味著又能夠用建構函式的引數賦予屬性預設值了。因為只建立 showcolor() 函式的乙個例項,所以沒有記憶體浪費。此外,給 ocar1 的 drivers 陣列新增 「bill」 值,不會影響到 ocar2 的陣列,所以輸出這些陣列的值時,ocar1.drivers 顯示的是 「mike,john,bill」,而 ocar2.drivers 顯示的是 「mike,john」。因為使用了原型方式,所以仍然能利用 instanceof 運算子來判斷物件的型別。

這種方式是 ecmascript 採用的主要方式,它具有其他方式的特性,卻沒有他們的***。不過,有些開發者仍覺得這種方法不夠完美。

JavaScript設計模式 架構型設計模式簡介

指的是一類框架結構,通過提供一些子系統,指定它們的職責,並且將它們調理清晰組織在一起。主要包含了同步模組模式 非同步模組模式 widget模式 mvc模式 mvp模式 mvvm模式 模組化把複雜的系統分解為高內聚 低耦合的模組,讓系統開發變得可控 可維護 可拓展,提高模組的復用率。同步模組模式 sm...

JavaScript 物件 設計模式

概念 無序屬性的集合,其屬性可以包含基本值 物件或者函式。嚴格來講,這就相當於說物件是一組沒有特定順序的值。物件的每個屬性或方法都有乙個名字,而每個名字都對映 到乙個值。正因為這樣,我們可以把物件想象成雜湊表 無非就是一組名值對,其中值可以是資料或函式。物件的屬性 資料屬性 修改屬性預設的特性 ob...

JavaScript設計模式九(模板方法模式)

定義 模板方法模式是一種只需要使用繼承就可以實現的非常簡單的模式 模板方法模式由兩部分組成,第一部分是抽象父類,另一部分是具體的實現子類。通常抽象父類中封裝了子類的演算法框架,包括實現一些公共的方法以及封裝子類中所有方法的執行順序。子類通過繼承這個類,然後繼承了這個演算法,然後重寫父類的方法 例子是...