js 包装函数&包装方法

包装函数 函数执行记时
  function  timed(f) {
    return function (...args) { //把实参收集到一个剩余形参数组args中
        console.log(`输入函数:${f.name}`);
        let startTime=Date.now();
        try{
          return f(...args)
        }
        finally{
          //在返回被包装的返回值之前,打印经过的时间
          console.log(`执行函数:${f.name} 耗时:${Date.now() - startTime}ms`)
        }
      }
    }
    //简单粗暴的方式计算1到n的数值之和
    function benchmark(n) {
      let sum=0;
      for(let i=1;i<=n;i++) sum+=i;
      return sum;
    }
    timed(benchmark)(100000)

 包装方法 方法执行记时
    function trace(o, m) {
      let original = o[m];
      o[m] = function (...args) {
        let startTime = Date.now();
        console.log(`开始执行:${m} 开始时间:${startTime.valueOf()}`)
        let result = original.apply(this, args)
        let endTime = Date.now();
        console.log(`结束执行:${m} 结束时间:${endTime.valueOf()}`)
        console.log(`执行方法:${m} 耗时:${endTime - startTime}ms`)
        return result;
      }
    }
    let o = {
      benchmark(n) {
        let sum = 0;
        for (let i = 1; i <= n; i++) sum += i;
        return sum;
      }
    }
  trace(o, "benchmark”)//改装替换对象的方法
  o.benchmark(100000000)//执行替换后的方法
 

 

posted @ 2021-09-09 14:48  暴燥的小蓝鲸  阅读(613)  评论(0)    收藏  举报