原型模式
目標(biāo)
以一個(gè)存在的對(duì)象為模板創(chuàng)建一個(gè)新的對(duì)象吭历。
何時(shí)使用
- 新建對(duì)象的初始化過(guò)程非常昂貴抡医,所以用克隆的方式达址。
- 希望創(chuàng)建一樣的對(duì)象。
- 對(duì)象中的狀態(tài)是有限的趁耗。
- 當(dāng)要實(shí)例化的類(lèi)是在運(yùn)行時(shí)刻指定時(shí)沉唠,例如,通過(guò)動(dòng)態(tài)裝載苛败。
- 當(dāng)一個(gè)系統(tǒng)應(yīng)該獨(dú)立于它的產(chǎn)品創(chuàng)建满葛,構(gòu)成和表示時(shí)。
舉例
1罢屈、資源優(yōu)化場(chǎng)景嘀韧。 2、類(lèi)初始化需要消化非常多的資源缠捌,這個(gè)資源包括數(shù)據(jù)锄贷、硬件資源等。 3曼月、性能和安全要求的場(chǎng)景谊却。 4、通過(guò) new 產(chǎn)生一個(gè)對(duì)象需要非常繁瑣的數(shù)據(jù)準(zhǔn)備或訪問(wèn)權(quán)限哑芹,則可以使用原型模式炎辨。 5、一個(gè)對(duì)象多個(gè)修改者的場(chǎng)景聪姿。 6碴萧、一個(gè)對(duì)象需要提供給其他對(duì)象訪問(wèn)乙嘀,而且各個(gè)調(diào)用者可能都需要修改其值時(shí),可以考慮使用原型模式拷貝多個(gè)對(duì)象供調(diào)用者使用破喻。
代碼
由于JavaScript是基于原型的語(yǔ)言虎谢,所以內(nèi)置了原型模式。
var myCar = {
name: "Ford Escort",
drive: function () {
console.log( "Weeee. I'm driving!" );
},
panic: function () {
console.log( "Wait. How do you stop this thing?" );
}
};
// Use Object.create to instantiate a new car
var yourCar = Object.create( myCar );
// Now we can see that one is a prototype of the other
console.log( yourCar.name );
總結(jié)
Object.create可以參考