/**
* 柯里化函数 & this绑定
* @param {Function} fn 原函数
* @param {Object} context this作用域
* @return {Function} 柯里化函数
*/
function bind(fn, context) {
var args = [].slice.call(arguments, 2);
return function() {
var innerArgs = [].slice.call(arguments);
return fn.apply(context, args.concat(innerArgs));
};
}
/**
* 类型判定函数(待柯里化)
* @param {String} t 具体数据类型值,例如:String、Object、Number...
* @param {Object} o 需要判断的数据
* @return {Boolean} 是否为数据的类型值
*/
function isType (t, o) {
return {}.toString.call(o) === '[object '+ t +']';
}
// 柯里化出具体类型的判定函数
var isArray = bind(isType, {}, 'Array'),
isObject = bind(isType, {}, 'Object'),
isNumber = bind(isType, {}, 'Number'),
isDate = bind(isType, {}, 'Date'),
isBoolean = bind(isType, {}, 'Boolean'),
isFunction = bind(isType, {}, 'Function'),
isString = bind(isType, {}, 'String');
How to use ?
e.g. :
var arr = [1, 2, 3];
if (isArray(arr)) {
// do sth
}
...