函数封装

基于ES6/7/8/9封装的工具函数(持续更新,力求精简)

南笙酒味 提交于 2020-01-14 02:15:26
请求相关: 场景: 后端接口路径格式: 1 //后端请求接口格式 2 3 //① 4 5 var url1= '/api/getUerInfo/{userId}/{roleId}' 6 7 // ② 8 9 var url2= '/api/getUerInfo' 后端需求前端传参: 1 //①不需求查询参数,对url不做进一步的处理,直接返回 2 3 //②需要传递查询参数,也就是查询参数需要拼接到url身上 需求: 1 console.log(getUrl('/api/getUerInfo/{userId}/{roleId}',{userId:12,roleId:33}))//api/getUerInfo/12/33 2 3 console.log(getUrl('/api/getUerInfo/{userId}/{roleId}',{userId:12,roleId:33,extraParam:'555'}))//api/getUerInfo/12/33 4 5 console.log(getUrl('/api/getUerInfo/{userId}/{roleId}',{userId:12,roleId:33,extraParam:'555'},true))///api/getUerInfo/12/33?extraParam=555 方法: 1 /** 2 * 请求相关: 3

谈谈 React Hooks

风格不统一 提交于 2020-01-13 03:30:08
谈谈 React Hooks React Hooks 是 React 16.7.0-alpha 版本推出的新特性,想尝试的同学安装此版本即可。 React Hooks 要解决的问题是状态共享,是继 render-props 和 higher-order components 之后的第三种状态共享方案,不会产生 JSX 嵌套地狱问题。 这个状态指的是状态逻辑,所以称为状态逻辑复用会更恰当,因为只共享数据处理逻辑,不会共享数据本身。 不久前精读分享过的一篇 Epitath 源码 - renderProps 新用法 就是解决 JSX 嵌套问题,有了 React Hooks 之后,这个问题就被官方正式解决了。 为了更快理解 React Hooks 是什么,先看笔者引用的下面一段 renderProps 代码: function App() { return ( <Toggle initial={false}> {({ on, toggle }) => ( <Button type="primary" onClick={toggle}> Open Modal </Button> <Modal visible={on} onOk={toggle} onCancel={toggle} /> )} </Toggle> ) } 恰巧,React Hooks 解决的也是这个问题: function

python项目封装日志通用工具

对着背影说爱祢 提交于 2020-01-12 13:03:16
关于日志颜色控制,详见: python打印高亮-日志颜色输出控制 一、日志工具类utils_log.py """ 定义log对象,以及改写log的部分函数,改变日志的输出颜色 """ import os , logging , logging . config , settings class MyLogger ( logging . Logger ) : """重写Logger的某些函数,给这些等级的日志输出不同颜色""" def info ( self , msg , * args , ** kwargs ) : """重写info函数""" if self . isEnabledFor ( 20 ) : self . _log ( 20 , "\033[36;1m%s\033[0m" % msg , args , ** kwargs ) def error ( self , msg , * args , ** kwargs ) : """重写error函数""" if self . isEnabledFor ( 40 ) : self . _log ( 40 , "\033[31;1m%s\033[0m" % msg , args , ** kwargs ) logging . setLoggerClass ( MyLogger ) logging . config .

Android 常见工具类封装

时光毁灭记忆、已成空白 提交于 2020-01-12 04:26:12
1,MD5工具类: public class MD5Util { public final static String MD5(String s) { char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; try { byte[] btInput = s.getBytes(); // 获得MD5摘要算法的 MessageDigest 对象 MessageDigest mdInst = MessageDigest.getInstance("MD5"); // 使用指定的字节更新摘要 mdInst.update(btInput); // 获得密文 byte[] md = mdInst.digest(); // 把密文转换成十六进制的字符串形式 int j = md.length; char str[] = new char[j * 2]; int k = 0; for (int i = 0; i < j; i++) { byte byte0 = md[i]; str[k++] = hexDigits[byte0 >>> 4 & 0xf]; str[k++] = hexDigits[byte0 & 0xf]; } return new

自封装数组的forEach(),fliter(),some(),every()方法 和字符串的repeat()方法

自古美人都是妖i 提交于 2020-01-11 17:43:35
封装数组的forEach() 实现数组的遍历 //封装数组的forEach() 实现数组的遍历 function forEach(array,fn){ for(let i=0;i<arr.length;i++){ fn(array[i],i,array); } } let arr =[1,3,5,6,7,8]; //调用函数打印出每一个元素 forEach(arr,function(item,index,arr){ document.write(`arr数组的第${index}个元素是${item}<br>`); }) 封装数组的fliter() //删选出符合条件的元素,返回符合条件元素的新数组 function fliter(array,fn){ let newarr=[]; for(let i=0;i<array.length;i++){ //删选出符合条件的元素,符合条件的传进新数组 if(fn(array[i],i,array)){ newarr[newarr.length]=array[i]; } } return newarr; } let arr =[1,3,5,6,7,8]; let newarr=fliter(arr,function(item,index,array){ //删选出大于5的元素 if(item>5) return item; })

面向对象编程三种特性

左心房为你撑大大i 提交于 2020-01-11 05:57:18
文章目录 面向过程 面向过程特点 面向对象 面向对象特点 对象和类 定义类 类创建对象 封装特性 封装的特性 继承特性 多继承 新式类与经典类 私有属性与私有方法 私有属性和私有方法: 多态 多态特点 C语言属于面向过程的语言,而C++、JAVA、python都属于面向对象的语言。 面向过程 面向过程”(Procedure Oriented)是一种以过程为中心的编程思想。分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。面向过程最重要的是模块化的思想方法。例如前面博客所写的 学生信息管理系统的主函数 。 面向过程特点 模块化 流程化 优点 : 性能比面向对象高, 因为类调用时需要实例化,开销比较大,比较消耗资源; 单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。 缺点 : 没有面向对象易维护、易复用、易扩展 面向对象 面向对象是按人们认识客观世界的系统思维方式,把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。 (一个类具有的共同行为) 面向对象特点 封装 继承 多态 优点 :易维护、易复用、易扩展。 由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护 缺点 : 性能比面向过程低。 对象和类

面向对象——封装

独自空忆成欢 提交于 2020-01-11 03:50:54
封装 面向对象的三大特性之一。 什么是封装? 封装指的是把属性装进一个容器 封装指的是隐藏的意思,但是这种隐藏式对外不对内的。 为何要封装 封装不是单纯意义的隐藏 封装数据属性的目的:将数据属性封装起来,类外部的使用就无法直接操作该数据属性了 需要类的内部开一个接口给使用者,类的设计者可以在这个接口之上附加任意逻辑,从而严格的控制使用者对属性的操作 封装函数属性的目的:隔离复杂度 如何封装 只需要在属性前加上__开头,该属性就会被隐藏起来,该隐藏具备的特点:   1、只是一种语法意义上的变形,即__开头的属性会在检测语法时发生变形_类名__属性名   2、这种隐藏式对外不对内,因为即__开头的属性检测语法时所有代码同一发生的变形   3、这种变形只在检测语法时发生一次,在类定义之后新增的__开头属性并不会发生变形   4、如果父类不想让子类覆盖自己的属性,可以在属性前加__开头。 封装属性 class Test: __x = 'test'#隐藏数据属性 def __test(self):#隐藏函数属性 print('test') def test(self): print(self.__x)#对内不隐藏 变形格式 t1 = Test() print(Test.__dict__)# print(t1._Test__x)#变形的格式后的属性的格式 t1.test()

vue封装的一些函数

↘锁芯ラ 提交于 2020-01-10 20:49:44
因项目要用到一些常用的函数,故简单的封装了些函数,方便自己以后调用把 utils.js: //根据数组中字段排序,从小到大 export const compare = (property) => { return function (a, b) { var value1 = a[property]; var value2 = b[property]; return value1 - value2; } } //根据数组中字段排序,从大到小 export const compare_big = (property) => { return function (a, b) { var value1 = a[property]; var value2 = b[property]; return value2 - value1; } } /** * 获取当前时间 * 格式YYYY-MM-DD */ export const getDate = () => { var date = new Date(); var seperator1 = "-"; var year = date.getFullYear(); var month = date.getMonth() + 1; var strDate = date.getDate(); if (month >= 1 && month <= 9

封装js工具函数

泄露秘密 提交于 2020-01-10 14:53:21
1、判断数据类型的方法 var type = function(data) { var toString = Object.prototype.toString; var dataType = data instanceof Element ? "element" // 为了统一DOM节点类型输出 : toString .call(data) .replace(/\[object\s(.+)\]/, "$1") .toLowerCase() return dataType }; 使用 type("a") // string type(1) // number type(window) // window type(document.querySelector("h1")) // element    来源: https://www.cnblogs.com/taochengyong/p/12175785.html

Python面向对象编程——封装

别来无恙 提交于 2020-01-10 03:58:36
Python面向对象编程——封装 从封装本身的意思去理解,封装就好像是拿来一个麻袋,把小猫,小狗,小王八,还有alex一起装进麻袋,然后把麻袋封上口子。照这种逻辑看,封装=‘隐藏’,这种理解是相当片面的。 一、先看如何隐藏 在python中用双下划线开头的方式将属性隐藏起来(设置成私有的) #其实这仅仅这是一种变形操作 #类中所有双下划线开头的名称如__x都会自动变形成:_类名__x的形式: class A: __N=0 #类的数据属性就应该是共享的,但是语法上是可以把类的数据属性设置成私有的如__N,会变形为_A__N def __init__(self): self.__X=10 #变形为self._A__X def __foo(self): #变形为_A__foo print('from A') def bar(self): self.__foo() #只有在类内部才可以通过__foo的形式访问到. #A._A__N是可以访问到的,即这种操作并不是严格意义上的限制外部访问,仅仅只是一种语法意义上的变形 这种自动变形的特点: 1、类中定义的 __x 只能在内部使用,如 self.__x ,引用的就是变形的结果。 2、这种变形其实正是针对外部的变形,在外部是无法通过 __x 这个名字访问到的。 3、在子类定义的 __x 不会覆盖在父类定义的 __x ,因为子类中变形成了: