let myObj = { str: 'Original Scope', foo: function() { console.log(`my scope is ${this.str}.`); } } function myBind(func, scope){ for(let prop in scope){ this[prop] = scope[prop]; } this.funcToCall = func; return this.funcToCall; } myObj.foo(); var newFoo = myBind(myObj.foo, {str: 'Overwridden Scope'}); newFoo();