首页 > 解决方案 > 通过 ES7 装饰器获取方法参数

问题描述

我正在试验 ES7 装饰器并编写一个方法装饰器,它只记录调用方法的参数。

适用于某些情况,例如this.sum(6, 5),但不适用于箭头函数this.arrowSum(5, 10)和默认参数this.sum()

我是否遗漏了某些东西,或者它只是当前装饰器实现中的一个限制?

import React from "react";
import ReactDOM from "react-dom";

function logArgs() {
  return function(target, property, descriptor) {
    let originalMethod = descriptor.value;
    descriptor.value = function(...args) {
      console.log(...args);
      return originalMethod.call(this, ...args);
    };

    return descriptor;
  };
}

class App extends React.Component {
  @logArgs()
  sum(a = 1, b = 2) {
    return a * b;
  }

  @logArgs()
  arrowSum = (a = 3, b = 4) => {
    return a * b;
  };

  render() {
    return (
      <div>
        {this.sum()} <br /> {this.sum(6, 5)}
        <br />
        {this.arrowSum()} <br /> {this.arrowSum(5, 10)}
      </div>
    );
  }
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

标签: javascriptreactjsdecoratorecmascript-next

解决方案


推荐阅读