在写一个debounce方法的时候,发现不能自己随便对一个function执行call,因为它有可能是一个经过bind的bound函数,于是写了一个函数来判断这个函数的类型。

function isBoundFunction(func) {
    if(typeof func.prototype === 'object') return false // 普通函数,包括对象方法,它们的prototype为object
    try {
        new func()
    }
    catch(e) {
        return false // 箭头函数不能被实例化
    }
    return true // bound函数prototype为undefined,虽然它也能被实例化
}

函数分了三种类型,普通函数、箭头函数和bound函数。实际上,根据上面的这种判断模式,你可以通过修改这个函数来判断函数是否是箭头函数。

2017-04-20 10:38:21