Tener esto:
const person = { name: "James Smith", hello: function (x) { console.log(this.name + " says hello " + x); } } function newContext() { this.name = "Someone else"; const code = "(function(){person.hello}).bind(this);" eval(code); } newContext();No hay salida. pero no sé por qué
No estás llamando a la función aquí:
(function(){person.hello}).bind(this);es
(function(){ person.hello }).bind(this); donde person.hello es solo una expresión no utilizada. Necesita person.hello (no envuelto en una función) para estar en el lado izquierdo, y también necesita llamarlo, con () después, o usando .call . También es posible que desee pasar un argumento (la x ).
const person = { name: "James Smith", hello: function (x) { console.log(this.name + " says hello " + x); } } function newContext() { this.name = "Someone else"; const code = "person.hello.call(this, 'xx');" eval(code); } newContext(); const person = { name: "James Smith", hello: function (x) { console.log(this.name + " says hello " + x); } } function newContext() { this.name = "Someone else"; const code = "person.hello.bind(this)('xx');" eval(code); } newContext();