Получить аргументы метода через ES7-декораторы - PullRequest
0 голосов
/ 31 декабря 2018

Я экспериментирую с декораторами 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);
...