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的一些核心概念非常的重要.因此,在这里记录下鄙人见解,希望可 ...
随机推荐
- C++_新特性总结与未来的路
了解C++之后,可以阅读一些高级主题和面向对象编程相关的书籍: OOP有助于开发大型的项目,并提高其可靠性: OOP方法的基本活动之一就是发明能够模拟当前情况的类.当前情况被统称为问题域. 由于实际问 ...
- HDU 3783
读入一个字符串,字符串中包含ZOJ三个字符,个数不一定相等,按ZOJ的顺序输出,当某个字符用完时,剩下的仍然按照ZOJ的顺序输出. MY:(OUTPUT LIMIT EXCEED) #include& ...
- Codeforces - 185A 简单矩阵快速幂
题意:求第n个三角形内部的上三角形个数 对每个三角形分别维护上下三角形个数,记为\(dp[1][i],dp[2][i]\) 规律很明显是 \(dp[1][i+1]=3*dp[1][i]+dp[2][i ...
- (POJ - 1050)To the Max 最大连续子矩阵和
Given a two-dimensional array of positive and negative integers, a sub-rectangle is any contiguous s ...
- 马的移动(BFS) 详细注释 一个具有情怀的题目
题目描述 小明很喜欢下国际象棋,一天,他拿着国际象棋中的"马"时突然想到一个问题: 给定两个棋盘上的方格a和b,马从a跳到b最少需要多少步? 现请你编程解决这个问题. 提示:国际象 ...
- hdu1837 看病要排队(优先队列)
看病要排队 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- 剑指offer——面试题11:快速排序
#include"iostream" #include"random" using namespace std; /* void Swap(int &a ...
- Python BeautifulSoup库的用法
BeautifulSoup是一个可以从HTML或者XML文件中提取数据的Python库,它通过解析器把文档解析为利于人们理解的文档导航模式,有利于查找和修改文档. BeautifulSoup3目前已经 ...
- PIE SDK去相关拉伸
1.算法功能简介 由于高度相关的数据集经常生成十分柔和的彩色图像,因此经常使用 去相关拉伸工具来体消除多光谱数据集中的高度相关性, 从而生成一幅色彩亮丽的彩色合成图像.去相关拉伸需要 3 个输入波段, ...
- jq api --css
.css() $("p").css("color","red"); $("p").css({ "color&q ...