Почему some_func (…)! = Some_func.call (this,…) в конструкторе

Я всегда предполагал, чтоsome_function(...) было точно так же, какsome_function.call(this, ...), Кажется, что это не относится к вызовам в конструкторах / контексте конструирования объекта:

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

ВChild.__init__ необходимо использовать явный вызовBase.call(this, value), Если я не буду использовать это длинное выражение,this назовет глобальный объект (window в браузерах) в вызываемом базовом конструкторе. С"use strict" будет выдана ошибка, так как в строгом режиме нет глобального объекта.

Может кто-нибудь, пожалуйста, объясните, почему я должен использоватьFunc.call(this, ...) в этом примере?

(Протестировано с Node.js v0.6.12 и Opera 12.50.)

Ответы на вопрос(1)

Ваш ответ на вопрос