之前的项目中需要一个购买数据商品并付款的功能,刚开始一直不敢使用面向对象的写法,主要是没有理清思路,而且那时的数据商品比较的复杂,就一直没敢动,在网上也找些面向对象的写法,把思路理清一遍,就想自己试着写写。
接下来我会一步一步分析,面向对象的写法过程。整个流程大致分为:
1、先定义好一个商品列表的数据形式和商品总数集,类似:
var data = [{name: 'name', unitPrice: 10, num: 2}]; var total = {type: 0, totalNum: 0, price: 0};
很明显在 data 数组里 name 表示单个商品名称,unitPrice 表示单个商品单价,num 表示单个商品数量;在 total 对象里 type 表示商品种类、totalNum 表示商品总数量、price 表示商品总价。
2、创建一个购物车的函数对象 ShoppingCart,并设置它的相应属性,如下:
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}; }
用一个 info 来把单个商品的名称、单价、数量保存起来,然后需要把这个 info 放到 data 数组里并且计算商品总数集 total,所以就需要设置这个函数对象的两个方法。就在 this.info 下面添加两个方法:
this.add();
this.getTotal();
这里要说明一下,为什么要把这两个方法放在函数对象的原型里,当 new 一个实例化对象时,就需要马上添加这个商品信息和计算商品总数集,所以没必要再用这个实例化对象调用这两个方法。
然后使用对象的 prototype 属性,把方法都放在这个属性里来调用,如下:
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; } } }
3、有添加就会有删除单个商品,就在 prototype 属性里再添加删除商品的方法,删除商品需要依据一个标识来删除指定的商品,这里我通过 name 值来删除,这时就需要一个方法去 date 数组里找对应这个 name 的商品,如下:
// 删除商品 delect: function () { var _this = this; data.splice(_this.check(_this.name), 1); _this.getTotal(); }, // 根据名称查商品 check: function (name) { for (var i = 0; i < data.length; i++) { if (name == data[i].name) return i; } }
4、修改单个商品数量,如下:
// 修改单个商品的数量 changeNum: function (num) { var _this = this; if (num == 0) { _this.delect(); return; } var _index = _this.check(_this.name); data[_index].num = num; _this.getTotal(); }
这里需要传一个参数,来设置指定的商品的数量。
整体代码如下:
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; } } }
这个 data 数组初始化数据可以是从后台传过来的数据,但是必须数据形式和定义的一样,并且要调用一下 getTotal 这个方法获取商品总数集。
最后就是简单的 new 一个个实例化,例如:
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 打印出来看看结果\(^o^)/~
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍Android实现购物车功能,包括了Android实现购物车功能的使用技巧和注意事项,需要的朋友参考一下 最近看了一些淘宝购物车的demo,于是也写了一个。 效果图如下: 主要代码如下: actvity中的代码: actvity中XML的代码: -XML中头部可以到网上找一个这里就不放上来了 .checkbox和button的样式可以根据个人喜好设置。 Adaper中的代码: Ada
本文向大家介绍vant实现购物车功能,包括了vant实现购物车功能的使用技巧和注意事项,需要的朋友参考一下 做一些电商或者支付页面,肯定少不了购物车功能,一方面正反选,另一方面动态价格,全选之后再去加减商品数量(这里必须考虑 里面有很多蛋疼的问题)猛的一想,感觉思路很清晰,但是,真正动起手来就各种bug出来了,说实话 搞这个购物车,浪费我整整一下午的时间,当我回过头捋一遍,其实,半小时就能完事。就
本文向大家介绍Python3实现购物车功能,包括了Python3实现购物车功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Python3实现购物车功能的具体代码,供大家参考,具体内容如下 购物车要求: 1、启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表 2、允许用户根据商品编号购买商品 3、用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
本文向大家介绍js实现购物车功能,包括了js实现购物车功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了js实现购物车功能的具体代码,供大家参考,具体内容如下 购物车实现3种方式 1、利用cookie 优点:不占用服务器资源,可以永远保存,不用考虑失效的问题 缺点: 对购买商品的数量是有限制的,存放数据的大小 不可以超过2k,用户如果禁用cookie那么就木有办法购买商品,卓越网实
本文向大家介绍Android仿外卖购物车功能,包括了Android仿外卖购物车功能的使用技巧和注意事项,需要的朋友参考一下 先看看效果图: 知识点分析 效果图来看不复杂内容并没多少,值得介绍一下的知识点也就下面几个吧 - 列表标题悬停 - 左右列表滑动时联动 - 添加商品时的抛物线动画 - 底部弹出购物车清单 - 数据的同步 另外就是实现效果的时候可能会遇到的几个坑。。。 布局很简单直接进入代码
本文向大家介绍PHP session实现购物车功能,包括了PHP session实现购物车功能的使用技巧和注意事项,需要的朋友参考一下 在wamp环境下,用PHP的session会话控制完成购物车的效果,数据存放在数组里练习,没有连接数据库,效果不错,简单易懂,以下是各部分的代码 common.php index.php action.php spcar.php delete.php 以上就是本文