# 实现 catulate 方法

function catulate(num) {
  // let res = num;
  // let fn = function() {
  //   return res;
  // };
  // fn.toString = function() {
  //   return res;
  // };
  // fn.plus = function(a) {
  //   res += a;
  //   return fn;
  // };
  // fn.reduce = function(a) {
  //   res -= a;
  //   return fn;
  // };
  // return fn;
  function gen(init) {
    this.value = init;
    this.plus = function(a) {
      this.value += a;
      return this;
    };
    this.reduce = function(a) {
      this.value -= a;
      return this;
    };
  }
  const obj = new gen(num);
  Object.defineProperty(obj, 'valueOf', {
    get() {
      return obj.value;
    }
  });
  Object.defineProperty(obj, 'toString', {
    get() {
      return obj.value;
    }
  });
  return obj;
}
catulate(5)
  .plus(3)
  .reduce(2);

catulate(5)
  .plus(3)
  .reduce(2) + 3;