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.)