JavaScript面向?qū)ο缶帉戀?gòu)物車功能
之前的項(xiàng)目中需要一個(gè)購(gòu)買數(shù)據(jù)商品并付款的功能,剛開始一直不敢使用面向?qū)ο蟮膶懛?,主要是沒有理清思路,而且那時(shí)的數(shù)據(jù)商品比較的復(fù)雜,就一直沒敢動(dòng),在網(wǎng)上也找些面向?qū)ο蟮膶懛?,把思路理清一遍,就想自己試著寫寫?nbsp;
接下來我會(huì)一步一步分析,面向?qū)ο蟮膶懛ㄟ^程。整個(gè)流程大致分為:
1、先定義好一個(gè)商品列表的數(shù)據(jù)形式和商品總數(shù)集,類似:
var data = [{name: 'name', unitPrice: 10, num: 2}]; var total = {type: 0, totalNum: 0, price: 0};
很明顯在 data 數(shù)組里 name 表示單個(gè)商品名稱,unitPrice 表示單個(gè)商品單價(jià),num 表示單個(gè)商品數(shù)量;在 total 對(duì)象里 type 表示商品種類、totalNum 表示商品總數(shù)量、price 表示商品總價(jià)。
2、創(chuàng)建一個(gè)購(gòu)物車的函數(shù)對(duì)象 ShoppingCart,并設(shè)置它的相應(yīng)屬性,如下:
function ShoppingCart (name, unitPrice, num) { this.name = name; this.unitPrice = unitPrice; this.num = num; this.info = {name: this.name,unitPrice: this.unitPrice,num: this.num}; }
用一個(gè) info 來把單個(gè)商品的名稱、單價(jià)、數(shù)量保存起來,然后需要把這個(gè) info 放到 data 數(shù)組里并且計(jì)算商品總數(shù)集 total,所以就需要設(shè)置這個(gè)函數(shù)對(duì)象的兩個(gè)方法。就在 this.info 下面添加兩個(gè)方法:
this.add();
this.getTotal();
這里要說明一下,為什么要把這兩個(gè)方法放在函數(shù)對(duì)象的原型里,當(dāng) new 一個(gè)實(shí)例化對(duì)象時(shí),就需要馬上添加這個(gè)商品信息和計(jì)算商品總數(shù)集,所以沒必要再用這個(gè)實(shí)例化對(duì)象調(diào)用這兩個(gè)方法。
然后使用對(duì)象的 prototype 屬性,把方法都放在這個(gè)屬性里來調(diào)用,如下:
ShoppingCart.prototype = { // 添加商品 add: function() { var _this = this; data.push(_this.info); }, // 商品總數(shù)集 getTotal: function () { total.type = data.length; total.totalNum = 0; total.price = 0; for (var i = 0; i < data.length; i++) { total.totalNum += data[i].num; total.price += data[i].num * data[i].unitPrice; } } }
3、有添加就會(huì)有刪除單個(gè)商品,就在 prototype 屬性里再添加刪除商品的方法,刪除商品需要依據(jù)一個(gè)標(biāo)識(shí)來刪除指定的商品,這里我通過 name 值來刪除,這時(shí)就需要一個(gè)方法去 date 數(shù)組里找對(duì)應(yīng)這個(gè) name 的商品,如下:
// 刪除商品 delect: function () { var _this = this; data.splice(_this.check(_this.name), 1); _this.getTotal(); }, // 根據(jù)名稱查商品 check: function (name) { for (var i = 0; i < data.length; i++) { if (name == data[i].name) return i; } }
4、修改單個(gè)商品數(shù)量,如下:
// 修改單個(gè)商品的數(shù)量 changeNum: function (num) { var _this = this; if (num == 0) { _this.delect(); return; } var _index = _this.check(_this.name); data[_index].num = num; _this.getTotal(); }
這里需要傳一個(gè)參數(shù),來設(shè)置指定的商品的數(shù)量。
整體代碼如下:
var data = new Array; var total = {type: 0, totalNum : 0, price:0}; function ShoppingCart (name, unitPrice, num) { this.name = name; this.unitPrice = unitPrice; this.num = num; this.info = {name: this.name,unitPrice: this.unitPrice,num: this.num}; this.add(); this.getTotal(); } ShoppingCart.prototype = { add: function() { var _this = this; data.push(_this.info); }, getTotal: function () { total.type = data.length; total.totalNum = 0; total.price = 0; for (var i = 0; i < data.length; i++) { total.totalNum += data[i].num; total.price += data[i].num * data[i].unitPrice; } }, delect: function () { var _this = this; data.splice(_this.check(_this.name), 1); _this.getTotal(); }, changeNum: function (num) { var _this = this; if (num == 0) { _this.delect(); return; } var _index = _this.check(_this.name); data[_index].num = num; _this.getTotal(); }, check: function (name) { for (var i = 0; i < data.length; i++) { if (name == data[i].name) return i; } } }
這個(gè) data 數(shù)組初始化數(shù)據(jù)可以是從后臺(tái)傳過來的數(shù)據(jù),但是必須數(shù)據(jù)形式和定義的一樣,并且要調(diào)用一下 getTotal 這個(gè)方法獲取商品總數(shù)集。
最后就是簡(jiǎn)單的 new 一個(gè)個(gè)實(shí)例化,例如:
var goods1 = new ShoppingCart('123', 100, 2 ) var goods2 = new ShoppingCart('456', 10, 3 ) var goods3 = new ShoppingCart('789', 1, 4 ) goods2.delect(); good3.changeNum(2) goods2 = new ShoppingCart('1234', 11, 1 ) goods2.changeNum(0)
自行可以把 data 和 total 打印出來看看結(jié)果\(^o^)/~
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- js購(gòu)物車實(shí)現(xiàn)思路及代碼(個(gè)人感覺不錯(cuò))
- js實(shí)現(xiàn)簡(jiǎn)單的購(gòu)物車有圖有代碼
- Javascript操縱Cookie實(shí)現(xiàn)購(gòu)物車程序
- JavaScript編寫一個(gè)簡(jiǎn)易購(gòu)物車功能
- 原生js模擬淘寶購(gòu)物車項(xiàng)目實(shí)戰(zhàn)
- js實(shí)現(xiàn)仿購(gòu)物車加減效果
- 使用Angular.js實(shí)現(xiàn)簡(jiǎn)單的購(gòu)物車功能
- 基于JavaScript實(shí)現(xiàn)添加到購(gòu)物車效果附源碼下載
- JS+HTML5實(shí)現(xiàn)的前端購(gòu)物車功能插件實(shí)例【附demo源碼下載】
- JS高仿拋物線加入購(gòu)物車特效實(shí)現(xiàn)代碼
- js繪制購(gòu)物車拋物線動(dòng)畫
- JS實(shí)現(xiàn)的簡(jiǎn)單拖拽購(gòu)物車功能示例【附源碼下載】
相關(guān)文章
使用iframe window的scroll方法控制iframe頁面滾動(dòng)
在頁面中如何控制內(nèi)嵌的iframe滾動(dòng)呢?方法是使用iframe window的scroll方法,大家可以參考下面的示例2014-03-03JavaScript中valueOf函數(shù)與toString方法深入理解
基本上,所有JS數(shù)據(jù)類型都擁有valueOf和toString這兩個(gè)方法,null除外。它們倆解決javascript值運(yùn)算與顯示的問題,本文將詳細(xì)介紹,有需要的朋友可以參考下2012-12-12echarts餅圖自定義設(shè)置顏色的3種實(shí)現(xiàn)方式
ECharts餅圖的顏色可以通過多種方式進(jìn)行設(shè)置,下面這篇文章主要給大家介紹了關(guān)于echarts餅圖自定義設(shè)置顏色的3種實(shí)現(xiàn)方式,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02JS動(dòng)畫定時(shí)器知識(shí)總結(jié)
這篇文章給大家總結(jié)了關(guān)于JS動(dòng)畫中定時(shí)器的相關(guān)用法以及相關(guān)知識(shí)點(diǎn)總結(jié),有需要的朋友可以參考學(xué)習(xí)下。2018-03-03javascript showModalDialog,open取得父窗口的方法
showModalDialog,open取得父窗口的代碼,需要的朋友可以參考下。2010-03-03