Function.prototype.myApply = function (arg) {
    const self = arg || window;
    const args = arguments[1];
    self.fn = this;
    if (args === void 0) {
      return self.fn();
    }
    const exec = 'arg.fn(' + args.join(',') + ')';
    const res = eval(exec);
    delete self.fn;
    return res;
  };

  const rose = {
    name: 'rose',
    greet: function (age) {
      console.log(`Hello, I am ${this.name}, ${age} year old`)
    }
  };

  const jack = {
    name: 'jack'
  }

  rose.greet(24);
  rose.greet.myApply(jack, [26]);