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

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

基础类BaseReqeust
构造函数中有固定的几个参数 class BaseReqeust{
constructor(){
this.platformId ='aaa';
this.noiseStr=undefined;
this.sign=undefined;
}
} module.exports=BaseReqeust;
const BaseReqeust = require('./BaseRequest')    // 引入JS

class SignValidateRequest extends BaseReqeust {
constructor() { // 不处理构造函数
super();
} // 获得随机字符串
genNoiseStr(len) {
len = len || 32;
let $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890';
let maxPos = $chars.length;
let noiseStr = '';
for (let i = 0; i < len; i++) {
// Math.random() 产生[0,1)间的数
// Math.random(x) * y 产生[x,y)之间的数,包括小数
// Math.floor() 产生一个数值向下取整
// .charAt() 返回指定位置字符
noiseStr += $chars.charAt(Math.floor(Math.random() * maxPos));
}
return noiseStr;
} getToSignStr(token){
let str=[];
// 获取随机字符串
if(!this.noiseStr){
this.noiseStr = this.genNoiseStr(32);
} // 循环给类中的变量进行操作
this.getValue(str,this);
str.push(token)
console.log(str.join('')); // 最终返回str,还需要进行MD5加密
return str.join('');
} getValue(str,obj){
let thisFields=[];
for(const field in obj){
const fieldType = typeof obj[field];
// 判断值和类型是否一样
if(fieldType === 'function'){
continue;
}
if(obj[field]===null||obj[field]===undefined){
continue;
}
thisFields.push(field);
}
thisFields.sort(); for(const i in thisFields){
const field = thisFields[i];
const fieldType = typeof obj[field];
// 判断值是否为一个数组
if(Array.isArray(obj[field])){
for(const index in obj[field]){
this.getValue(str,obj[field][index]);
} }else if(fieldType==='number'||fieldType==='string'||fieldType==='boolean'){
str.push(obj[field]);
}else{
this.getValue(str,obj[field]);
}
}
}
} module.exports = SignValidateRequest;
class UserRequest extends SignValidateRequests {
constructor(param) {
super();
for (var key in param) {
this[key] = param[key]; // 获取构造函数,修改其中的参数
}
}
} function encryption(param, url){
const req = new UserRequest(param); // 通过构造函数获取对象
req.sign = encrypt.hexMD5(req.getToSignStr(token)); // 对参数进行赋值
}

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

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

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. SGU - 275 线性基 初步

    题意:求给出的数任意异或的最大值 目前对线性基的理解过于肤浅,有空总结一下 #include<iostream> #include<algorithm> #include< ...

  2. java单元测试之Mock静态方法

    1 public final class AmountUtil { public static String CustomFormatWith2Digits(int amount) { return ...

  3. 1140 Look-and-say Sequence (20 分)

    Look-and-say sequence is a sequence of integers as the following: D, D1, D111, D113, D11231, D112213 ...

  4. ndoejs创建多重文件夹

    function mkdir(filepath){ var path=require("path") if(!fs.existsSync(path.dirname(filepath ...

  5. maven的resources插件

    <build><sourceDirectory>src/jvm</sourceDirectory> <testSourceDirectory>test/ ...

  6. python练习六十九:urllib爬取练习

    爬取图片,将链接中的图片取出来,并统计一共下载了多少图片 代码: def fetch_pictures(url): headers = {'User-Agent':'Mozilla/5.0 (Wind ...

  7. mysql explain工具使用

    explain工具可以确认执行计划是否良好,查询是否走了合理的索引.查询的执行计划,随着数据的变化也可能会有变化.调用方式:explain + [sql语句]. 另外,explain是有局限性的:1. ...

  8. (转载) win10生成SSH keys

    (转载) win10生成 SSH keys:   SSH key 可以让你在你的电脑和Code服务器之间建立安全的加密连接.  先执行以下语句来判断是否已经存在本地公钥: cat ~/.ssh/id_ ...

  9. shell 进阶变量的指定 declare

    declare 设置 -r 只读 -i 设置整形 -a 数组 让指定的函数成为一个数组 -f 函数 如果在脚本中使用declare -f, 而不加任何参数的话, 那么将会列出这个脚本之前定义的所有函数 ...

  10. IE678910不兼容H5的placeholder属性,需要JS解决

    两种方法的思路 一.使用input的value作为显示文本 二.不使用value,添加一个额外的span标签,绝对定位覆盖到input上面. 两种方式各有优缺点,方法一占用了input的value属性 ...