constructor()方法
在做微信小程序的时候,需要对传输的数据进行加密,大牛给我介绍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()方法的更多相关文章
- es6 class 中 constructor 方法 和 super
首先,ES6 的 class 属于一种“语法糖”,所以只是写法更加优雅,更加像面对对象的编程,其思想和 ES5 是一致的. <1>constructor function Point(x, ...
- ES6之class 中 constructor 方法 和 super 的作用
首先,ES6 的 class 属于一种“语法糖”,所以只是写法更加优雅,更加像面对对象的编程,其思想和 ES5 是一致的. function Point(x, y) { this.x = x; thi ...
- ES6深入学习记录(一)class方法相关
今天学习class相关的一些使用方法,着重在于class extends class之间可以通过extends关键字实现继承,这比ES5的通过修改原型链实现继承,要清晰和方便很多. 上面的代码定义了一 ...
- javascript中prototype、constructor以及__proto__之间的三角关系
三者暧昧关系简单整理 在javascript中,prototype.constructor以及__proto__之间有着“著名”的剪不断理还乱的三角关系,楼主就着自己对它们的浅显认识,来粗略地理理以备 ...
- C++-copy constructor、copy-assignment operator、destructor
本文由@呆代待殆原创,转载请注明出处. 对于一个类来说,我们把copy constructor.copy-assignment operator.move constructor.move-assig ...
- 推断js中的类型:typeof / instanceof / constructor / prototype
怎样推断js中的类型呢,先举几个样例: var a = "jason"; var b = 123; var c = true; var d = [1,2,3]; var e = n ...
- [Ext JS 4] Extjs 它 initComponent 和 constructor差分
initComponent 和 constructor是什么 Extjs 提供的组件还是挺丰富的, 可是有时候需求更丰富. 当Extjs 原生的组件无法实现我们的要求的时候, 就须要扩展Extjs 的 ...
- Js中数据类型判断的几种方法
判断js中的数据类型有一下几种方法:typeof.instanceof. constructor. prototype. $.type()/jquery.type(),接下来主要比较一下这几种方法的异 ...
- 鄙人对constructor和prototype的总结
在学习js面向对象过程中,我们总是对constructor和prototype充满疑惑,这两个概念是相当重要的,深入理解这两个概念对理解js的一些核心概念非常的重要.因此,在这里记录下鄙人见解,希望可 ...
随机推荐
- em 与 rem 区别.
em 与自身 字体大小有关. rem 与 body 的字体大小有关..
- cenos安装erlang
https://blog.zfanw.com/install-erlang-on-centos/
- 非阻塞模式ServerSocketChannel 聊天室服务器端
import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import ja ...
- codeforces1097D Makoto and a Blackboard 数学+期望dp
题目传送门 题目大意: 给出一个n和k,每次操作可以把n等概率的变成自己的某一个因数,(6可以变成1,2,3,6,并且概率相等),问经过k次操作后,期望是多少? 思路:数学和期望dp 好题好题!! ...
- 小a与星际探索---DP
题目描述 小a正在玩一款星际探索游戏,小a需要驾驶着飞船从11号星球出发前往nn号星球.其中每个星球有一个能量指数pp.星球ii能到达星球jj当且仅当pi>pjpi>pj.同时小a的飞船还 ...
- MongoChef
简介 开源且免费,有商业版 可自动化生成查询语句 使用 最下面的 _id 是自动生成的,手动指定 { .0, "_id" : ObjectId("58 ...
- kafaka安装
wget https://mirrors.cnnic.cn/apache/kafka/2.0.0/kafka_2.11-2.0.0.tgz 解压 Tar -xvf kafka_2.11-2.0.0.t ...
- (转)source、sh、bash、./执行脚本的区别
source.sh.bash../执行脚本的区别 原文:https://www.cnblogs.com/sparkbj/p/5976100.html 1.source命令用法: source Fil ...
- 岛屿问题求最短路径(DFS)
用1代表陆地,用0代表陆地,你可以上下左右移动,给出下面这张地图求出最短路径 0101100001101001010110000 #include <iostream> #include ...
- Hsl PLC
https://github.com/dathlin/HslCommunication 地址