Referring to "this" in a parent closure in javascript

closures, javascript, this

Solution

Keeping a reference to the parent (like you have) is a good approach, however for your specific example there's no need for the anonymous wrapper, you can pass the function directly, like this:

var self = this;
this.b = function()
{
  Z(self.c);
}

You can test it out here, and without this wrapper there's actually no need for the `self` variable, you can just use `this` directly, like this:

this.b = function()
{
  Z(this.c);
}

You can test that version here.

Since there seems to be some confusion in the comments below, the above code maintains `this` for the question, if you want to maintain the `this`/context inside the callback as well, use `.call()` like this:

this.b = function()
{
  Z.call(this, this.c);
}

And for `Z`:

function Z( f )
{
  f.call(this);
}

You can test it here.

Problem

I want to do this in Javascript: ``` function Z( f ) { f(); } function A() { this.b = function() { Z( function () { this.c() } ); } this.c = function() { alert('hello world!'); } } var foo = new A(); foo.b(); ``` It can be accomplished this way: ``` function Z( f ) { f(); } function A() { var self = this; this.b = function() { Z( function () { self.c() } ); } this.c = function() { alert('hello world!'); } } var foo = new A(); foo.b(); ``` Is there a better way?

Original source