判断 arrow function

判断一个函数是普通函数还是箭头函数的一般方法
更新于: 2023-07-31 09:51:53
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');
}