Protect the global reference in javascript
javascript, scopes
Solution
You can use function.call.
new function Outer(){
'use strict';
console.log(this);
(function(){ // This function could be a 3rd Party function
console.log(this); //<-- Now it will it the one from the outer scope
}).call(this);
}; // You don't need to invoke this explicitly here with () since you are invoking it already with new keyword so constructor invocation doesnt need ()
Or a best bet would be to cache the context outside and use it anywhere in the inner scope.
new function Outer(){
'use strict';
var self = this;
console.log(this);
(function(){ // This function could be a 3rd Party function
console.log(self); //<-- Now it will it the one from the outer scope
})();
};
Problem
The following javascript code, allows you to access the global object (window/worker). ``` (new function Outer(){ console.log(this); /* The object */ (function(){ // This function could be a 3rd Party function console.log(this); /* window !!*/ })(); }); ``` Is there a way by which I can ensure that the inner this always gets a reference to Outer's context. I know i can do ``` (new function Outer(){ 'use strict'; console.log(this); /* The object */ (function(){ // This function could be a 3rd Party function console.log(this); /* undefined ? !!*/ })(); }); ``` but that results in `this` being undefined. Edit I know about `bind`, but what if the inner function is nested. for instance something like ``` (function(){ (function(){ (function(){ console.log(this);// undefined })(); })(); }).bind(this)(); ``` What i want is : Outer {} and not a reference to the outer using a variable :-|