封装常用的通用功能函数
- Source:
Methods
(static) appendUrlParam(url, extraParams) → {string}
- Source:
拼接参数,注:当前只针对小程序标准url,暂未考虑含#号/多?号等特殊url情形
Parameters:
Name | Type | Description |
---|---|---|
url |
string | 原url |
extraParams |
Object.<string, string> | 新增参数/覆盖已有参数,key为参数名,value为参数值 |
Returns:
新url
- Type
- string
(static) combineFuncs(funcs) → {function}
- Source:
将多个函数组合成一个新函数
调用新函数 等价于 依次调用各个源函数
Parameters:
Name | Type | Description |
---|---|---|
funcs |
Array.<function()> | 函数列表 |
Returns:
新函数
- Type
- function
(static) compareVersion(v1, v2) → {number}
- Source:
版本号比较
Parameters:
Name | Type | Description |
---|---|---|
v1 |
string | 版本号1,形如"2.2.3" |
v2 |
string | 版本号2 |
Returns:
比较结果: -1 小于 | 0 等于 | 1 大于
- Type
- number
(static) deepAssign(target, …sources)
- Source:
深度覆盖
将源对象的值覆盖目标对象,相同结构相同参数部分直接覆盖,其它部分保持不变
Example
修改前:
target = {x: 1, y: {a: 1, b:1 }, z: 1};
source = {x: 2, y: {a: 2}};
修改后:
target = {x: 2, y: {a: 2, b:1 }, z: 1}
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
target |
object | 目标对象 |
|
sources |
object |
<repeatable> |
若干个源对象 |
(static) deepClone(source) → {*}
- Source:
深度拷贝
Parameters:
Name | Type | Description |
---|---|---|
source |
* | 源参数 |
Returns:
源参数的深度拷贝
- Type
- *
(static) deepEqual(o1, o2) → {boolean}
- Source:
深度判等
两个对象结构和数据完全一致,即认为相等,而不要求是同一引用
Parameters:
Name | Type | Description |
---|---|---|
o1 |
* | 参数1 |
o2 |
* | 参数2 |
Returns:
参数1、参数2 是否相等
- Type
- boolean
(static) delay(ms) → {Promise}
- Source:
设置延时
Example
async function demo(){
console.log('enter demo, timestamp:', Date.now());
await delay(2000); //延迟2s再执行后续代码
console.log('continue demo, timestamp:', Date.now());
}
Parameters:
Name | Type | Description |
---|---|---|
ms |
number | 延迟时长,单位:ms |
Returns:
- Type
- Promise
(static) isNonEmptyObject(item) → {boolean}
- Source:
判断一个变量是否为非空对象
Parameters:
Name | Type | Description |
---|---|---|
item |
* |
Returns:
- Type
- boolean
(static) isNonNullObject(item) → {boolean}
- Source:
判断一个变量是否为非null对象
Parameters:
Name | Type | Description |
---|---|---|
item |
* |
Returns:
- Type
- boolean
(static) makeAssignableMethod(instance, method, rcvThisopt)
- Source:
将实例方法封装为通用函数,使之可以在任何this对象上执行
类似于原生语法中的bind函数,会保证方法被执行时this始终为指定的this对象,
会额外记录实际触发源的this对象,并以参数的形式传给方法
Example
//日志管理器
class Logger {
commonInfo = { //所有日志都会携带的公共信息,如机型、版本号等
loggerVersion: '1.0.0'
};
//上报日志
log(options){
//函数执行时,this对象要始终保持为Logger对象,会需要访问this.commonInfo等内容
console.log('[log]', 'customInfo:', options, 'commonInfo:', this.commonInfo);
//通过options.thisIssuer参数传入触发日志上报的组件的this对象
let trigger = options.thisIssuer;
let triggerInfo = ...; //获取触发源信息,如组件级公共参数等
}
}
let logger = new Logger();
let log = makeAssignableMethod({ //将logger.log封装为通用的log函数
instance: logger,
method: 'log',
rcvThis: {
argIdx: 0,
argProp: 'thisIssuer'
}
});
class Component {
log, //该通用log函数可以在任何地方使用,也可以注册到其它类上
test(){
this.log({action: 'test'}); //相当于:logger.log({action:'test', 'thisIssuer': this})
}
}
Parameters:
Name | Type | Attributes | Description | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
instance |
object | 实例对象 |
||||||||||||||||
method |
string | 方法名 |
||||||||||||||||
rcvThis |
object | boolean |
<optional> |
触发源this保存配置 Properties
|
(static) padStart(str, minLen, leadChar) → {string}
- Source:
若字符串长度小于指定长度,则在前方拼接指定字符
es6中string的padStart函数目前存在兼容性问题,暂以此替代
Example
let num = 1;
padStart(num, 2, '0'); //'01'
Parameters:
Name | Type | Description |
---|---|---|
str |
string | number | 字符串 |
minLen |
number | 指定长度 |
leadChar |
string | number | 指定字符 |
Returns:
新字符串
- Type
- string
(static) parseInlineStyle(styleStr) → {Object}
- Source:
将内联样式字符串解析为对象形式
Parameters:
Name | Type | Description |
---|---|---|
styleStr |
string | 内联样式,e.g. 'color: red; transform: translate(20px, 30px)' |
Returns:
内联样式对象,e.g. {color:"red",transform:"translate(20px, 30px)"}
- Type
- Object
(static) peerAssign(target, …sources)
- Source:
覆盖目标字段,剔除多余字段
将源对象的值覆盖目标对象,相同结构相同参数部分直接覆盖,其它部分予以剔除
Example
//模块中指定的可配项列表及其默认值
const defaultOptions = {
x: 1,
y: {a: 1, b: 1}
};
//调用方传入的自定义配置
let customOptions = {
y: {a: 2}, //可能只指定了部分配置
zz: 2, //可能还含有一堆杂七杂八的属性
zzz: 2,
};
//初始配置(target为空对象时,取source[0]作为蓝本,只保留sources[0]中的属性)
let options = peerAssign({}, defaultOptions, customOptions);
console.log('options:', options); //{x: 1, y: {a:2, b:1}} 所需属性予以覆盖,多余属性予以剔除
//增量配置(target不为空时,取target作为蓝本,只保留target中的属性)
peerAssign(options, {x:3, y: {b:3}, zz:3});
console.log('options:', options); //{x: 3, y: {a:2, b:3}}
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
target |
object | 目标对象 |
|
sources |
object |
<repeatable> |
若干个源对象 |
(async, static) queryRect(selector, thisCompopt) → {object}
- Source:
查询元素在页面中的坐标,单位:px
Parameters:
Name | Type | Attributes | Default | Description |
---|---|---|---|---|
selector |
string | 元素选择器 |
||
thisComp |
<optional> |
null
|
微信自定义组件this对象,目标元素在自定义组件中时需提供 |
Returns:
元素坐标,格式同boundingClientRect返回值
- Type
- object
(static) semanticRemainTime(remainMs, remainderInterval, topLevel) → {Object}
- Source:
剩余时间的语义化表示
Parameters:
Name | Type | Description |
---|---|---|
remainMs |
number | 剩余时间,单位:毫秒 |
remainderInterval |
number | 最小时间间隔,不足1秒的部分以此计数 |
topLevel |
string | 顶层间隔:day|hour|minute|second, 如顶层间隔为'hour',则返回结果为形如 27小时3分钟 而不是 1天3小时3分钟 |
Returns:
格式形如:{days: number, hours: number, minutes: number, seconds: number, remainderIntervals: number},表示 剩余days天hours小时minutes分钟seconds秒remainderIntervals间隔
- Type
- Object
(static) toAbsolutePath(relativePath, curPath) → {string}
- Source:
将小程序相对路径转为绝对路径
Parameters:
Name | Type | Description |
---|---|---|
relativePath |
string | 相对路径 |
curPath |
string | 当前路径 |
Returns:
绝对路径
- Type
- string
(static) toInlineStyle(styleObj) → {string}
- Source:
将样式对象转为内联样式字符串
Parameters:
Name | Type | Description |
---|---|---|
styleObj |
Object | 内联样式对象,e.g. {color:"red",transform:"translate(20px, 30px)"} |
Returns:
内联样式,e.g. 'color: red; transform: translate(20px, 30px)'
- Type
- string