Function.prototype.call = function(context) { context = context || window; context.fn = this; var args = Array.prototype.slice.call(arguments, 1); let result = context.fn(...args); delete context.fn; return result; }; Function.prototype.apply = function(context, args) { context = context || window; context.fn = this; let result = null; if(!args) { result = context.fn(); } else { result = context.fn(...args); } delete context.fn; return result; };