养成良好的代码编写习惯
1、定义任何变量都需要加类型,不确定类型的需要添加注释。目的是方便调试溯源和阅读代码。
2、模块间的数据引用在本模块写引用。比如背包道具有装备类型 type=EQUIP ,在背包里写拿到所有装备的接口getEquipData,在需要显示所有装备的地方如英雄穿戴就在英雄模块里写equipData = bag.getEquipData。
3、界面跳转和返回。无论跳转任何次,返回都可以实现。
1)定义面板类型。分为场景,面板,小弹窗。
2)定义界面层级。1级界面,2级界面,3级界面。
3)定义界面是否全屏,若全屏需要在跳转后关闭当前界面。
4)定义打开界面的方式,正常打开或跳转。
5)定义界面的通用接口,所有界面都需要实现这些接口,如
open(args);
close(backToLast:boolean);//关闭界面是否返回上一层
backData(args);//每个界面重写返回传参,一般return open用的args。
6)定义面板管理类,定义通用界面打开方法,定义每个界面的参数。
4、布尔值的判断和赋值。
1)用Math.max(n,0)而不是n || 0,因为n可能为负数。
2)return !!xx,两个非可以实现布尔值转换。
3)布尔值数组可以用值的位移操作来替代,目的是精简优化服务端数据的存储。
如有有一个10天的奖励,领取了3,5,9天的奖励,用数组表示为[0,0,1,0,1,0,0,0,1]。
var cond: number = xxx;//想要知道第xxx个奖励是否已领取 var stateArr: number[] = [0,0,1,0,1,0,0,0,1]; if (stateArr[cond-1]) return true; else return false;
用值来表示
//原数组[0,0,1,0,1,0,0,0,1]的倒序100010100 parseInt(100010100,2) = 276 var cond: number = xxx;//想知道第xxx个奖励是否已领取 var stateFlag = 276; if (stateFlag >> (cond-1) & 1) return true; else return false;
5、排序。sort方法返回值是-1还是1的理解l。
1)从小到大。
var a = [1,3,2,5,4]; a.sort( (a,b)=>{ if(a>b) return 1; else return -1 } );
//等同于return a-b
2)从大到小。
var a = [1,3,2,5,4]; a.sort( (a,b)=>{ if(a>b) return -1; else return 1 } );
//等同于return b-a
6、变量的命名,根据所属模块和类型确定固定字符(如Bag---View),加上自定义字符(不要磨磨唧唧,取个名字用得着费多大劲儿),通俗易懂,首选英文,次选中文全拼,中文简拼一定记得写注释(不要过段时间自己都不认识了),控制长度。
1)BagItemTipView
2)BagTiShiView
3)/**背包通用道具*/BagTYDJView。写变量写注释写在变量前面,用/** */格式,这样在IDE()里面鼠标指到变量上会显示注释里的内容。
7、慎用对象传参。
//传递对象主要在赋值方面容易出问题 //若需要改变对象,如: var obj = null; change(obj) function change(objArg) { objArg = new ItemObject;//这个时候注意函数外面的obj并没有被重新赋值仍然是null,想实现这种操作只能是在外部写这句,或者改变原理obj的结构变成下面这种 } var obj = {obj:null}; change(obj) function change(objArg) { objArg.obj = new ItemObject; } //若不能改变传参对象,但又需要对该对象赋值啥的一堆操作,只能是复制一份传进来的对象 var obj = {id:3}; change(obj); function change(objArg) { var objCopy = ObjCopy(objArg); } //复制对象 function ObjCopy(src, dst?) { var newobj = dst || {}; if (src) { for (var name in src) { if (typeof src[name] === "object") { //先判断一下obj[name]是不是一个对象 newobj[name] = (src[name].constructor === Array) ? [] : {}; //我们让要复制的对象的name项=数组或者是json ObjCopy(src[name], newobj[name]); //然后来无限调用函数自己 递归思想 } else { newobj[name] = src[name]; //如果不是对象,直接等于即可,不会发生引用。 } } } return newobj; }
原文地址:https://www.cnblogs.com/chickenfarm/p/12919212.html
- 【死磕Java并发】—- 深入分析CAS
- [SQLServer大对象]——FileTable从文件系统迁移文件
- [机器学习]-[数据预处理]-中心化 缩放 KNN(二)
- [数据清洗]-看上去一样的数字
- [数据清洗]- Pandas 清洗“脏”数据(三)
- [数据清洗]- Pandas 清洗“脏”数据(二)
- [数据清洗]-Pandas 清洗“脏”数据(一)
- [数据清洗]-混乱的邮编数据
- 10行代码,Python实现爬取淘宝/天猫评论
- 4.请求安全-- 结合使用的安全优势总结
- TensorFlow强化学习入门(4)——深度Q网络(DQN)及其扩展
- 3.请求安全-- 如何验证请求的唯一性
- 2.请求安全-- MD5的必要性以及实际应用场景
- 1.请求安全-- 一个简单的 单设备登录 单点登录
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- laravel5.6 框架邮件队列database驱动简单demo示例
- php layui实现前端多图上传实例
- 解决Centos7下crontab+shell脚本定期自动删除文件问题
- PHP使用ajax的post方式下载excel文件简单示例
- laravel邮件发送的实现代码示例
- php curl发送请求实例方法
- ubuntn备份办法总结(四种)
- PHP中散列密码的安全性分析
- php的RSA加密解密算法原理与用法分析
- PHP实现微信提现(企业付款到零钱)
- centos7下rsync+crontab定期同步备份
- php抽象类和接口知识点整理总结
- php中echo与print区别点整理
- laravel框架模型和数据库基础操作实例详解
- Yii Framework框架使用PHPExcel组件的方法示例