operationKit

封装常用的通用功能函数

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
Name Type Attributes Default Description
argIdx number <optional>
0

将触发源this保存到下标为argIdx的参数的argProp属性上

argProp string <optional>
'thisIssuer'

将触发源this保存到下标为argIdx的参数的argProp属性上

(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