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的一些核心概念非常的重要.因此,在这里记录下鄙人见解,希望可 ...
随机推荐
- 洛谷 P4859 && BZOJ3622: 已经没有什么好害怕的了
题目描述 给出 \(n\) 个数 \(a_i\) ,以及 \(n\) 个数 \(b_i\) ,要求两两配对使得 \(a>b\) 的对数减去 \(a<b\) 的对数等于 \(k\) . ...
- C. Connect Three Round #528 (Div. 2)【曼哈顿距离】
一.题面 题目链接 二.分析 这题的关键是要确定一个点是从三个点出发的交汇点,其他的只要结合曼哈顿距离的定义即可明白.因为是三个点,这个交汇点的坐标分别对应的就是x,y值的中值.然后一个小技巧就是曼哈 ...
- Maven-常规问题
1.编译(compile)Maven项目时,报错: -Dmaven.multiModuleProjectDirectory system property is not set. 处理方案:Windo ...
- 基于WebImage的图片上传工具类
支持缩略图和水印. using System; using System.IO; using System.Linq; using System.Web; using System.Web.Helpe ...
- 升级TeeChart pro
teechart 安装流程如下: 1. 将生成的 LIB中的 选中文件copy到C:\Users\Public\Documents\RAD Studio\8.0\Dcp 图1 1. fastrep ...
- spring初始化bean的目的
初始化bean就是为了将所有需要的bean全部装载到容器里面,等我们需要用到哪个bean就将哪个bean从容器里面拿出来
- 远程上传下载文件-Xftp5
Xftp5下载 链接:https://pan.baidu.com/s/1Wzso_Q7mPy5uGOUlripEWg 密码:xfx9 安装选择家庭版 由于21端口没有开,所以不能选FTP, 选择SF ...
- elastic 集群安装
Elastic Search 安装和配置 1.下载 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6. ...
- Unity 代码控制游戏对象是父物体的第多少个子对象
一个canvas下的游戏对象,排列顺序越往下,渲染顺序就越靠后,就会覆盖在先前的图形上.也就是说,运行游戏后,物体的渲染顺序是一个一个计算的. Transform.SetSiblingIndex(in ...
- yield用法
yield的__next__()和send()的用法,详见代码 def D(): n = 1 while n < 5: m = yield n print("m:",m) p ...