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]);