摘要:車輛的模具是福特如果你希望自己去實(shí)現(xiàn)原型模式,而不直接使用。車輛模具是福特總結(jié)原型模式,就是創(chuàng)建一個(gè)共享的原型,通過(guò)拷貝這個(gè)原型來(lái)創(chuàng)建新的類,用于創(chuàng)建重復(fù)的對(duì)象,帶來(lái)性能上的提升。參考自湯姆大叔的博客設(shè)計(jì)模式之原型模式
什么是原型模式
原型模式 (Prototype pattern):通俗點(diǎn)講就是創(chuàng)建一個(gè)共享的原型,并通過(guò)拷貝這些原型創(chuàng)建新的對(duì)象。用于創(chuàng)建重復(fù)的對(duì)象,這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的不錯(cuò)選擇。
實(shí)現(xiàn)原型模式我們可以通過(guò)JavaScript特有的原型繼承特性去實(shí)現(xiàn)原型模式,也就是創(chuàng)建一個(gè)對(duì)象作為另一個(gè)對(duì)象的prototype屬性值,我們也可以通過(guò)Object.create(prototype, optionalDescriptorObjects)來(lái)實(shí)現(xiàn)原型繼承。
// 因?yàn)椴皇菢?gòu)造函數(shù),所以不用大寫 var someCar = { drive: function () { }, name: "馬自達(dá) 3" }; // 使用Object.create創(chuàng)建一個(gè)新車x var anotherCar = Object.create(someCar); anotherCar.name = "豐田佳美";
Object.create() 方法會(huì)使用指定的原型對(duì)象及其屬性去創(chuàng)建一個(gè)新的對(duì)象。
var vehicle = { getModel: function () { console.log("車輛的模具是:" + this.model); } }; var car = Object.create(vehicle, { "id": { value: MY_GLOBAL.nextId(), enumerable: true }, "model": { value: "福特", enumerable: true } });
如果你希望自己去實(shí)現(xiàn)原型模式,而不直接使用Object.create。你可以使用一下代碼實(shí)現(xiàn)。
var vehiclePrototype = { init: function (carModel) { this.model = carModel; }, getModel: function () { console.log("車輛模具是:" + this.model); } }; function vehicle(model) { function F() { }; F.prototype = vehiclePrototype; var f = new F(); f.init(model); return f; } var car = vehicle("福特Escort"); car.getModel();總結(jié):
原型模式,就是創(chuàng)建一個(gè)共享的原型,通過(guò)拷貝這個(gè)原型來(lái)創(chuàng)建新的類,用于創(chuàng)建重復(fù)的對(duì)象,帶來(lái)性能上的提升。
參考自湯姆大叔的博客設(shè)計(jì)模式之原型模式
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/92632.html
摘要:函數(shù)式編程前端掘金引言面向?qū)ο缶幊桃恢币詠?lái)都是中的主導(dǎo)范式。函數(shù)式編程是一種強(qiáng)調(diào)減少對(duì)程序外部狀態(tài)產(chǎn)生改變的方式。 JavaScript 函數(shù)式編程 - 前端 - 掘金引言 面向?qū)ο缶幊桃恢币詠?lái)都是JavaScript中的主導(dǎo)范式。JavaScript作為一門多范式編程語(yǔ)言,然而,近幾年,函數(shù)式編程越來(lái)越多得受到開(kāi)發(fā)者的青睞。函數(shù)式編程是一種強(qiáng)調(diào)減少對(duì)程序外部狀態(tài)產(chǎn)生改變的方式。因此,...
摘要:綜上所述有原型鏈繼承,構(gòu)造函數(shù)繼承經(jīng)典繼承,組合繼承,寄生繼承,寄生組合繼承五種方法,寄生組合式繼承,集寄生式繼承和組合繼承的優(yōu)點(diǎn)于一身是實(shí)現(xiàn)基于類型繼承的最有效方法。 一、前言 繼承是面向?qū)ο螅∣OP)語(yǔ)言中的一個(gè)最為人津津樂(lè)道的概念。許多面對(duì)對(duì)象(OOP)語(yǔ)言都支持兩種繼承方式::接口繼承 和 實(shí)現(xiàn)繼承 。 接口繼承只繼承方法簽名,而實(shí)現(xiàn)繼承則繼承實(shí)際的方法。由于js中方法沒(méi)有簽名...
摘要:目錄導(dǎo)語(yǔ)理解對(duì)象和面向?qū)ο蟮某绦蛟O(shè)計(jì)創(chuàng)建對(duì)象的方式的繼承機(jī)制原型對(duì)象原型鏈與原型對(duì)象相關(guān)的方法小結(jié)導(dǎo)語(yǔ)前面的系列文章,基本把的核心知識(shí)點(diǎn)的基本語(yǔ)法標(biāo)準(zhǔn)庫(kù)等章節(jié)講解完本章開(kāi)始進(jìn)入核心知識(shí)點(diǎn)的高級(jí)部分面向?qū)ο蟮某绦蛟O(shè)計(jì),這一部分的內(nèi)容將會(huì)對(duì)對(duì)象 目錄 導(dǎo)語(yǔ) 1.理解對(duì)象和面向?qū)ο蟮某绦蛟O(shè)計(jì) 2.創(chuàng)建對(duì)象的方式 3.JavaScript的繼承機(jī)制 3.1 原型對(duì)象 3.2 原型鏈 3.3 與...
摘要:深入之繼承的多種方式和優(yōu)缺點(diǎn)深入系列第十五篇,講解各種繼承方式和優(yōu)缺點(diǎn)。對(duì)于解釋型語(yǔ)言例如來(lái)說(shuō),通過(guò)詞法分析語(yǔ)法分析語(yǔ)法樹(shù),就可以開(kāi)始解釋執(zhí)行了。 JavaScript深入之繼承的多種方式和優(yōu)缺點(diǎn) JavaScript深入系列第十五篇,講解JavaScript各種繼承方式和優(yōu)缺點(diǎn)。 寫在前面 本文講解JavaScript各種繼承方式和優(yōu)缺點(diǎn)。 但是注意: 這篇文章更像是筆記,哎,再讓我...
摘要:深入系列第十四篇,講解創(chuàng)建對(duì)象的各種方式,以及優(yōu)缺點(diǎn)。也就是說(shuō)打著構(gòu)造函數(shù)的幌子掛羊頭賣狗肉,你看創(chuàng)建的實(shí)例使用都無(wú)法指向構(gòu)造函數(shù)這樣方法可以在特殊情況下使用。 JavaScript深入系列第十四篇,講解創(chuàng)建對(duì)象的各種方式,以及優(yōu)缺點(diǎn)。 寫在前面 這篇文章講解創(chuàng)建對(duì)象的各種方式,以及優(yōu)缺點(diǎn)。 但是注意: 這篇文章更像是筆記,因?yàn)椤禞avaScript高級(jí)程序設(shè)計(jì)》寫得真是太好了! 1....
閱讀 1955·2021-11-15 11:39
閱讀 1155·2020-12-03 17:06
閱讀 804·2019-12-27 11:42
閱讀 3321·2019-08-30 13:59
閱讀 1543·2019-08-26 13:22
閱讀 3327·2019-08-26 12:15
閱讀 2523·2019-08-26 10:22
閱讀 1639·2019-08-23 18:40