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的一些核心概念非常的重要.因此,在这里记录下鄙人见解,希望可 ...
随机推荐
- win10系统常用操作
1.打开控制面板 (1)选中“此电脑”,右键选择“属性”. (2)可见 控制面板主页 2.设置环境变量和系统变量 (1)选中“此电脑”,右键选择“属性”. (2)可见 控制面板主页 (3)点击高级系统 ...
- Navicat 连接Sqlite数据库的方法和步骤
1.打开Navicat,进行如下操作. 2.在弹出的新建连接对话框中输入正确的信息,点击“确定”按钮. 3.可见如下
- openLayers地图缩放的回调
//设置地图最小缩放级别为17级 map.events.register("zoomend", this, function (e) { //每次地图缩放时就会进入到这 if (m ...
- Q686 重复叠加字符串匹配
给定两个字符串 A 和 B, 寻找重复叠加字符串A的最小次数,使得字符串B成为叠加后的字符串A的子串,如果不存在则返回 -1. 举个例子,A = "abcd",B = " ...
- linux 第八章 高级键盘
1.clear:清屏 2.history:显示历史命令列表 3.Ctrl+A:移动光标到行首 4.Ctrl+E:移动光标到行尾 5.Ctrl+F:光标向前移动一个字符 6.Ctrl+B:光标向h后移动 ...
- css display flew 伸缩盒模型
父级容器属 <!doctype html> <html lang="en"> <head> <meta charset="UTF ...
- rancher1.X+docker+k8s搭建容器管理集群
一, 环境准备 服务器 Linux k8s-m -.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Li ...
- shell 操作符详解
= 赋值操作符,可以用于算术和字符串赋值 + 加法计算 - 减法运算 * 乘法运算 / 除法运算 ** 幂运算 % 模运算 取他除后的剩余数 因此这个十分好求公约数 += &qu ...
- poi生成excel报表合并列
功能任务 poi导出excel统计报表,有合并列的. 根据结构生成层级. 目标 1输入一个linkshashmap LinkedHashMap<String, Object> fieldM ...
- jQuery.Flot开发手记
目录 介绍 使用 自定义参数 自定义图例 自定义坐标 自定义数据序列 自定义网格 其他 鼠标停留在图表节点时显示tooltip 介绍 项目地址:http://www.flotcharts.org/ A ...