Issue with Javascript this context -


this question has answer here:

i'm having issue following code.console.log working fine in logname method not giving desired output in lognameagain method. tried google in vain. please explain going on here?

var testobj = {     name: "this test object",     logname: function() {         console.log(this.name);  //works fine           function lognameagain() {             console.log(this.name); //not giving expected result;         }          lognameagain();      } };  testobj.logname(); 

jsfiddle

seems console.log in lognameagain method pointing window. doesn't make sense me?

update: understand can fixed using bind/call or self don't understand why happening?

try using .bind() (see working jsfiddle):

var testobj = {     name: "this test object",     logname: function() {         console.log(this.name);          var lognameagain = function() {             console.log(this.name);         }.bind(this);          lognameagain();      } };  testobj.logname(); 

the problem new function inside of logname has window (global) context. means need somehow pass in local context. function.prototype.bind that.

if browser support concern, can hacky thing:

var testobj = {     name: "this test object",     logname: function() {         var = this;         console.log(this.name);          var lognameagain = function() {             console.log(that.name);         };          lognameagain();      } };  testobj.logname(); 

that's if need support ie8 , below. here's compat table .bind() (courtesy of mdn:

bind


Comments

Popular posts from this blog

javascript - oscilloscope of speaker input stops rendering after a few seconds -

javascript - gulp-nodemon - nodejs restart after file change - Error: listen EADDRINUSE events.js:85 -

Fatal Python error: Py_Initialize: unable to load the file system codec. ImportError: No module named 'encodings' -