Ok, so I thought I understood this (no pun intended), but apparently not.
var Constructor = function () {
var internalFunction = function () {
return this === window;
};
this.myMethod = function () {
alert(internalFunction());
};
};
var myObj = new Constructor();
myObj.myMethod();
This alerts true. Why can’t the internal function see this as the object? Instead I have to use alert(internalFunction.call(this)); in myMethod.
Edit: I was looking for an explanation as to why this is assigned in that way, not workarounds such as var self = this;, etc. Sorry if I didn’t make that clear.
thisis not bound until the function is called and is dependent on how the function is called. You could think of it as an extra parameter implicitly passed to the function.In this case, the problem is that you’re calling
internalFunctionusinginternalFunction(). Thethisvalue is set either by calling a function as a method (as infoo.bar()orfoo["bar"]()) or by settingthisexplictly viacall()orapply(). Your call is doing neither sothisreverts to the global object.The simplest way to achieve what you want in this case while keeping
internalFunctionprivate is to store a reference tothisinside the constructor function: