在做微信小程序的时候,需要对传输的数据进行加密,大牛给我介绍constructor()方法,不是很懂这个但是用了一次,今天来用自己的想法来理解这个方法

——————————————————————————————————————————————————————————————————————————————

  1. 基础类BaseReqeust
    构造函数中有固定的几个参数
  2.  
  3. class BaseReqeust{
  4. constructor(){
  5. this.platformId ='aaa';
  6. this.noiseStr=undefined;
  7. this.sign=undefined;
  8. }
  9. }
  10.  
  11. module.exports=BaseReqeust;
  1. const BaseReqeust = require('./BaseRequest') // 引入JS
  2.  
  3. class SignValidateRequest extends BaseReqeust {
  4. constructor() { // 不处理构造函数
  5. super();
  6. }
  7.  
  8. // 获得随机字符串
  9. genNoiseStr(len) {
  10. len = len || 32;
  11. let $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890';
  12. let maxPos = $chars.length;
  13. let noiseStr = '';
  14. for (let i = 0; i < len; i++) {
  15. // Math.random() 产生[0,1)间的数
  16. // Math.random(x) * y 产生[x,y)之间的数,包括小数
  17. // Math.floor() 产生一个数值向下取整
  18. // .charAt() 返回指定位置字符
  19. noiseStr += $chars.charAt(Math.floor(Math.random() * maxPos));
  20. }
  21. return noiseStr;
  22. }
  23.  
  24. getToSignStr(token){
  25. let str=[];
  26. // 获取随机字符串
  27. if(!this.noiseStr){
  28. this.noiseStr = this.genNoiseStr(32);
  29. }
  30.  
  31. // 循环给类中的变量进行操作
  32. this.getValue(str,this);
  33. str.push(token)
  34. console.log(str.join(''));
  35.  
  36. // 最终返回str,还需要进行MD5加密
  37. return str.join('');
  38. }
  39.  
  40. getValue(str,obj){
  41. let thisFields=[];
  42. for(const field in obj){
  43. const fieldType = typeof obj[field];
  44. // 判断值和类型是否一样
  45. if(fieldType === 'function'){
  46. continue;
  47. }
  48. if(obj[field]===null||obj[field]===undefined){
  49. continue;
  50. }
  51. thisFields.push(field);
  52. }
  53. thisFields.sort();
  54.  
  55. for(const i in thisFields){
  56. const field = thisFields[i];
  57. const fieldType = typeof obj[field];
  58. // 判断值是否为一个数组
  59. if(Array.isArray(obj[field])){
  60. for(const index in obj[field]){
  61. this.getValue(str,obj[field][index]);
  62. }
  63.  
  64. }else if(fieldType==='number'||fieldType==='string'||fieldType==='boolean'){
  65. str.push(obj[field]);
  66. }else{
  67. this.getValue(str,obj[field]);
  68. }
  69. }
  70. }
  71. }
  72.  
  73. module.exports = SignValidateRequest;
  1. class UserRequest extends SignValidateRequests {
  2. constructor(param) {
  3. super();
  4. for (var key in param) {
  5. this[key] = param[key]; // 获取构造函数,修改其中的参数
  6. }
  7. }
  8. }
  9.  
  10. function encryption(param, url){
  11. const req = new UserRequest(param); // 通过构造函数获取对象
  12. req.sign = encrypt.hexMD5(req.getToSignStr(token)); // 对参数进行赋值
  13. }

————————————————————————————————————————————————————————————————————————————————

待续。。。。。。(吃饭去)

constructor()方法的更多相关文章

  1. es6 class 中 constructor 方法 和 super

    首先,ES6 的 class 属于一种“语法糖”,所以只是写法更加优雅,更加像面对对象的编程,其思想和 ES5 是一致的. <1>constructor function Point(x, ...

  2. ES6之class 中 constructor 方法 和 super 的作用

    首先,ES6 的 class 属于一种“语法糖”,所以只是写法更加优雅,更加像面对对象的编程,其思想和 ES5 是一致的. function Point(x, y) { this.x = x; thi ...

  3. ES6深入学习记录(一)class方法相关

    今天学习class相关的一些使用方法,着重在于class extends class之间可以通过extends关键字实现继承,这比ES5的通过修改原型链实现继承,要清晰和方便很多. 上面的代码定义了一 ...

  4. javascript中prototype、constructor以及__proto__之间的三角关系

    三者暧昧关系简单整理 在javascript中,prototype.constructor以及__proto__之间有着“著名”的剪不断理还乱的三角关系,楼主就着自己对它们的浅显认识,来粗略地理理以备 ...

  5. C++-copy constructor、copy-assignment operator、destructor

    本文由@呆代待殆原创,转载请注明出处. 对于一个类来说,我们把copy constructor.copy-assignment operator.move constructor.move-assig ...

  6. 推断js中的类型:typeof / instanceof / constructor / prototype

    怎样推断js中的类型呢,先举几个样例: var a = "jason"; var b = 123; var c = true; var d = [1,2,3]; var e = n ...

  7. [Ext JS 4] Extjs 它 initComponent 和 constructor差分

    initComponent 和 constructor是什么 Extjs 提供的组件还是挺丰富的, 可是有时候需求更丰富. 当Extjs 原生的组件无法实现我们的要求的时候, 就须要扩展Extjs 的 ...

  8. Js中数据类型判断的几种方法

    判断js中的数据类型有一下几种方法:typeof.instanceof. constructor. prototype. $.type()/jquery.type(),接下来主要比较一下这几种方法的异 ...

  9. 鄙人对constructor和prototype的总结

    在学习js面向对象过程中,我们总是对constructor和prototype充满疑惑,这两个概念是相当重要的,深入理解这两个概念对理解js的一些核心概念非常的重要.因此,在这里记录下鄙人见解,希望可 ...

随机推荐

  1. 洛谷 P4859 && BZOJ3622: 已经没有什么好害怕的了

    题目描述 给出 \(n\) 个数 \(a_i\)​ ,以及 \(n\) 个数 \(b_i\)​ ,要求两两配对使得 \(a>b\) 的对数减去 \(a<b\) 的对数等于 \(k\) . ...

  2. C. Connect Three Round #528 (Div. 2)【曼哈顿距离】

    一.题面 题目链接 二.分析 这题的关键是要确定一个点是从三个点出发的交汇点,其他的只要结合曼哈顿距离的定义即可明白.因为是三个点,这个交汇点的坐标分别对应的就是x,y值的中值.然后一个小技巧就是曼哈 ...

  3. Maven-常规问题

    1.编译(compile)Maven项目时,报错: -Dmaven.multiModuleProjectDirectory system property is not set. 处理方案:Windo ...

  4. 基于WebImage的图片上传工具类

    支持缩略图和水印. using System; using System.IO; using System.Linq; using System.Web; using System.Web.Helpe ...

  5. 升级TeeChart pro

    teechart 安装流程如下: 1.  将生成的 LIB中的 选中文件copy到C:\Users\Public\Documents\RAD Studio\8.0\Dcp 图1 1.  fastrep ...

  6. spring初始化bean的目的

    初始化bean就是为了将所有需要的bean全部装载到容器里面,等我们需要用到哪个bean就将哪个bean从容器里面拿出来

  7. 远程上传下载文件-Xftp5

    Xftp5下载 链接:https://pan.baidu.com/s/1Wzso_Q7mPy5uGOUlripEWg 密码:xfx9 安装选择家庭版 由于21端口没有开,所以不能选FTP,  选择SF ...

  8. elastic 集群安装

    Elastic Search 安装和配置 1.下载 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6. ...

  9. Unity 代码控制游戏对象是父物体的第多少个子对象

    一个canvas下的游戏对象,排列顺序越往下,渲染顺序就越靠后,就会覆盖在先前的图形上.也就是说,运行游戏后,物体的渲染顺序是一个一个计算的. Transform.SetSiblingIndex(in ...

  10. yield用法

    yield的__next__()和send()的用法,详见代码 def D(): n = 1 while n < 5: m = yield n print("m:",m) p ...