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的一些核心概念非常的重要.因此,在这里记录下鄙人见解,希望可 ...
随机推荐
- CentOS 7 设置日期和时间
现代操作系统分为以下两种类型的时钟: 实时时钟(Real-Time Clock,RTC),通常称为硬件时钟(一般是系统主板上的集成电路),它完全独立于操作系统的当前状态,即使在计算机关闭时也能运行. ...
- 老男孩python作业2-购物车程序
购物车程序要求: 1.启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表 2.允许用户根据商品编号购买商品 3.用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 ...
- C++_函数2-内联函数
内联函数的目的是为了提高程序运行速度所做的一项改进. 常规函数与内联函数的区别不在于编写方式,而在于C++编译器如何将它们组合到程序中. 编译过程的最终产品是:可执行程序,由一组机器语言指令组成.运行 ...
- Windows 环境 ABP前端运行 ng test 无法执行
Command: ng test Error Information: Schema validation failed with the following errors: Data path &q ...
- Asp.Net 远程连接Oracle数据库
Asp.Net 远程连接Oracle数据库 首先从微软停止.Net FrameWork支持Oracle数据库的研发,转为第三方提供说起,微软是很有实力的公司,他在桌面领域令其他对手望其项背,产品战线也 ...
- Luogu P1282 多米诺骨牌 DP。。背包?
背包...差不多..QWQ 设f[i]为达到差值为i的状态需要多少次,那就很显然了: 注意区分正负不同的代价的循环方向 技巧:如果不想改负数的话,那可以移动一下数组下标,用一个新的指针指向原来的数组 ...
- python-%操作符
1.打印字符串 print("His name is %s"%("Aviad")) His name is Aviad 2.打印整数print("He ...
- Java中filter内处理重定向遇到的问题
这是在Java中filter内处理重定向遇到的问题.本意是写一个做URL rewrite 的filter,来重写URL,同时在处理登陆过程中要杀掉当前session,创建新session来代替. 1. ...
- 微信小程序实现图片上传功能
前端: 微信开发者工具 后端:.Net 服务器:阿里云 这里介绍微信小程序如何实现上传图片到自己的服务器上 前端代码 data: { productInfo: {} }, //添加Banner bin ...
- PIE SDK Pansharp融合
1.算法功能简介 Pansharp 融合是基于最小二乘逼近法来计算多光谱影像和全色影像之间灰度值关系,具体过程是利用最小方差技术对参与融合的波段灰度值进行最佳匹配,以减少融合后的颜色偏差.该融合方法不 ...