Warum ist some_func (…)! = Some_func.call (this,…) in einem Konstruktor?

Das habe ich immer angenommensome_function(...) war genau das gleiche wiesome_function.call(this, ...). Dies scheint nicht für Aufrufe in Konstruktoren / einem Objektkonstruktionskontext zu gelten:

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

ImChild.__init__ es ist notwendig, den expliziten Aufruf von zu verwendenBase.call(this, value). Wenn ich diesen langwierigen Ausdruck nicht benutze,this würde das globale Objekt benennen (window in Browsern) im aufgerufenen Basiskonstruktor. Mit"use strict" Im strikten Modus wird ein Fehler ausgelöst, da kein globales Objekt vorhanden ist.

Kann mir bitte jemand erklären, warum ich verwenden mussFunc.call(this, ...) In diesem Beispiel?

(Getestet mit Node.js v0.6.12 und Opera 12.50.)

Antworten auf die Frage(1)

Ihre Antwort auf die Frage