判断 arrow function
判断一个函数是普通函数还是箭头函数的一般方法
const obj = {
fn1() {
console.log('normal fn1', this);
},
fn2: () => {
console.log('arrow fn2', this);
},
fn3: function () {
console.log('normal fn3', this);
},
fn4: function () {
return ()=>{
console.log('123');
}
}
};
// 这个是证明可行的
const isArrowFn = (f) =>
typeof f === 'function' &&
/^([^{=]+|\(.*\)\s*)?=>/.test(f.toString().replace(/\s/, ''));
// 网上经常出现的方案,实际证明行不通
// 反例: isArrowFn2(obj.fn2)
function isArrowFn2(fn) {
return fn instanceof Function && !fn.hasOwnProperty('prototype');
}