thinkjs-util
var util = require('thinkjs-util');
下面所有方法都是在util下的。
Promise
thinkjs中的Promise使用了es6-promise 库,是个全局对象, 含有如下的方法:
all(array)
resolve(promise | thenable | obj)
reject(obj)
race(array)
Class(superCls, prop)
- superCls
function
父类 - prop
function | object
如果是function,则执行这个function,并获取结果 - return
function
通过该函数动态创建一个类,可以实现类继承和自动调用init方法的功能,同时实例化类的时候可以省去new
。如果只传了一个参数,则认为是prop。
//A为通过Class动态创建的一个类var A = ;//实例化类A,可以不写newvar instance = ;var name = instance; /*name is `A welefen`*/
通过Class函数创建的类支持继承,含有以下2个静态方法:
extend(obj)
扩展方法到类的原型上inherits(superCls)
指定该类的父类
子类可以继承父类的方法,同时可以对方法进行重写。
var B = ; //B类从A类继承而来//B类的实例化var instance = ;var name = instance; /*name is `A welefen`*/B;var name = instance; /*name is `B welefen`*/
也可以在重写的方法里调用父类的方法,如:
var C = ; //从A类继承var instance = ;var name = instance; /*name is `C A welefen`*/
如果有多级继承,想跨级调用父类的方法时,只能通过apply的方式调用原形链上的方法,如:
var D = ; //从C类继承var instance = ;var name = instnace; /*name is `D A welefen`*/;
注意:
不可用下面的方式来继承
var A = ;var B = ; //此时B不含有getName方法
extend(target, source1, source2, ...)
- target
object
- source1
object
- return
object
将source1, source2等对象上的属性或方法复制到target对象上,类似于jQuery里的$.extend方法。
默认为深度复制,可以将第一个参数传false
进行浅度复制。
注意
: 赋值时,忽略值为undefined的属性。
isBoolean(obj)
obj
要检测的对象return
true OR false
检测一个对象是否是布尔值。
//判断是否是布尔值; //true; //true
isNumber(obj)
检测一个对象是否是数字。
; //true; //true
isObject(obj)
检测是否是对象
; //true; //true
isString(obj)
检测是否是字符串
; // true; //true
isFunction(obj)
检测是否是函数
; //true; //true
isDate(obj)
检测是否是日期对象
; //true
isRegexp(obj)
检测是否是正则
; //true; //true
isError(obj)
检测是否是个错误
; //true
isEmpty(obj)
检测是否为空
//检测是否为空; //true; //true; //true; //true; //true; //true; //true
isArray(obj)
检测是否是数组
; //true; //true; //true
isIP4(obj)
检测是否是IP4
; //true; //true
isIP6(obj)
检测是否是IP6
; //true; //true
isIP(obj)
检测是否是IP
; //true; //true; //true ip6
isFile(file)
检测是否是文件,如果在不存在则返回false
; //true; //false
isDir(dir)
检测是否是目录,如果不存在则返回false
; //true
isBuffer(buffer)
检测是否是Buffer
; //true
isNumberString(obj)
是否是字符串类型的数字
; //true; //true; //true
isPromise(promise)
检测是否是个promise
; //true; //true
isWritable(p)
判断文件或者目录是否可写,如果不存在则返回false
mkdir(p, mode)
递归的创建目录
p
要创建的目录mode
权限,默认为0777
//假设/home/welefen/a/b/不存在;; //递归创建子目录
chmod(p, mode)
修改目录权限,如果目录不存在则直接返回
;
ucfirst(name)
将首字符变成大写,其他变成小写
; // Welefen; // Welefen
md5(str)
获取字符串的md5值,如果传入的参数不是字符串,则自动转为字符串
; //59dff65d54a8fa28fe372b75d459e13b
getPromise(obj, reject)
获取一个promise对象。默认为resolve promise
,如果reject参数为true,那么返回reject promise
。
如果obj是promise,那么直接返回。
; //resolve promise; //reject promisevar promise = ;; //
getDefer()
获取一个Deferred
对象,对象含有如下的属性或者方法:
resolve
方法:将promise resolvereject
方法:将promise rejectpromise
属性:Deferred对应的Promise
//把读取文件内容变成promisevar fs = ;{ var deferred = ; fs return deferredpromise;};
deferred.promise
默认为pedding
状态,pedding
状态的promise不会执行后续的then,也不会执行catch。如果想阻止后面的代码继续执行,那么可以返回一个pedding promise
。
//返回一个pedding promisevar { var deferred = ; return deferredpromise;}
getObject(name, value)
在项目中,经常会遇到要动态创建一个对象。如:
var data = {};//name和value从其他地方动态读取出来的dataname = value;//有时候还要设置多个dataname1 = value1;
为了方便创建对象,可以通过getObject
来完成。
//单个属性var data = ;//多个属性var data = ;//更多的属性var data = ;
arrToObj(arr, key, valueKey)
在项目中,经常会从数据库中查询多条数据,然后对数据进行一些操作。如:根据特定的key进行去除等。我们一般借助对象来完成此类操作,这时候需要把数组转化为对象。
可以借助arrToObj来完成。
//从数据库中查询出来的数据对象var arr = id: 10 name: "name1" value: "value1" id: 11 name: "name2" value: "value2";//把id值作为key生成一个对象/* data = {10: {id: 10, name: "name1", value: "value1"}, 11: {id: 11, name: "name2", value: "value2"}} */var data = ;//把id值作为key,只需要name的值//data = {10: "name1", 11: "name2"}var data = ;//只获取id的值// ids = [10, 11];var ids = ;