I always assumed that some_function(...) was exactly the same as some_function.call(this, ...). This seems not to hold true for calls in constructors / an object construction context:
function Class(members, parent) {
function Ctor(value) {
members.__init__.call(this, value);
return this;
};
Ctor.prototype = members;
Ctor.prototype.__proto__ = parent.prototype;
return Ctor;
}
var Base = Class({
__init__: function(value) {
this.value = value;
}
}, {});
var Child = Class({
__init__: function(value) {
// Base(value*2); ← WON'T WORK AS EXPECTED
Base.call(this, value*2); // works just fine
}
}, Base);
In Child.__init__ it in necessary to use the explicit call to Base.call(this, value). If I don't use this lengthy expressing, this would name the global object (window in browsers) in the called base constructor. With "use strict" an error would be thrown as there is no global object in strict mode.
Can someone please explain why I have to use Func.call(this, ...) in this example?
(Tested with Node.js v0.6.12 and Opera 12.50.)