code: function around(functionToAdvise, aroundAdvice, name = functionToAdvise.name) {
      return function aroundAdvisedFunction(...args) {
          let joinPoint = {
              target: this,
              args: args,
              method: name,
              proceed: null,
              proceedApply: null
          };
  
          // constructor interception
          if (this instanceof aroundAdvisedFunction) {
              let proxy = joinPoint.target = Object.create(functionToAdvise.prototype);
              joinPoint.proceed = applyConstructor.bind(null, functionToAdvise, proxy, args);
              joinPoint.proceedApply = (scope, ...args) => applyConstructor(functionToAdvise, proxy, args);
          }
          else {
              joinPoint.proceed = functionToAdvise.bind(this, ...args);
              joinPoint.proceedApply = (scope, ...args) => functionToAdvise.apply(scope, args);
          }
  
          return aroundAdvice.call(joinPoint.target, joinPoint);
      };
  }
docs: 返回一个新的函数, 执行逻辑为, 执行 aroundAdvice, aroundAdvice 接收一个 ProceedingJoinPoint 对象作为参数,
  调用其 proceed/proceedApply 方法将执行 functionToAdvise.
  
  @param {Function} functionToAdvise 被拦截函数
  @param {aroundAdvice} aroundAdvice 环绕通知函数
  @param {string} [name] 函数名, 默认取 functionToAdvise.name
  @return {Function} 组装了拦截功能后的函数