原始的方式:建立物件,然後給它設定幾個屬性
函式建立物件方法:解決原始的方式每建立乙個例項都需要建立乙個原始的方式
函式建立物件方法傳遞引數:讓上面的函式建立物件方法可以傳遞屬性
函式建立物件方法傳遞函式方法:工廠函式外定義物件的方法,然後通過屬性指向該方法
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設計模式九(模板方法模式)
定義 模板方法模式是一種只需要使用繼承就可以實現的非常簡單的模式 模板方法模式由兩部分組成,第一部分是抽象父類,另一部分是具體的實現子類。通常抽象父類中封裝了子類的演算法框架,包括實現一些公共的方法以及封裝子類中所有方法的執行順序。子類通過繼承這個類,然後繼承了這個演算法,然後重寫父類的方法 例子是...