x ist keine Funktion ... was erwartet man von Object.create mit einem Konstruktor?

Für diese Frage erwarte ich keine Lösung, möchte aber die Dinge besser verstehen.

Einige Zitate aus den Spezifikationen:

Ausgabe 5.1 (Verknüpfung)

§15.2.3.5 Object.create (O [, Properties])

Die Funktion create erstellt ein neues Objekt mit einem angegebenen Prototyp. Beim Aufruf der Funktion create werden folgende Schritte ausgeführt:

Wenn Type (O) nicht Object oder Null ist, wird eine TypeError-Ausnahme ausgelöst.Es sei obj das Ergebnis der Erstellung eines neuen Objekts wie durch den Ausdruck new Object (), wobei Object der integrierte Standardkonstruktor mit diesem Namen istSetzen Sie die interne Eigenschaft [[Prototype]] von obj auf O.Wenn das Argument Properties vorhanden und nicht undefiniert ist, fügen Sie obj eigene Eigenschaften hinzu, als ob Sie die integrierte Standardfunktion Object.defineProperties mit den Argumenten obj und Properties aufrufen.Rückgabe obj.

Ausgabe 6 - Entwurf (Verknüpfung)

§19.1.3.2 Object.create (O [, Properties])

Die Funktion create erstellt ein neues Objekt mit einem angegebenen Prototyp. Beim Aufruf der Funktion create werden folgende Schritte ausgeführt:

Wenn Type (O) nicht Object oder Null ist, wird eine TypeError-Ausnahme ausgelöst.Sei obj das Ergebnis der abstrakten Operation ObjectCreate mit dem Argument O.Wenn das Argument Eigenschaften vorhanden und nicht undefiniert ist, dann a. Gibt das Ergebnis der abstrakten Operation ObjectDefineProperties (obj, Properties) zurück.Rückgabe obj.

Wenn ich richtig verstanden habe, ermöglichen beide Spezifikationen die Ausführung des folgenden Codes:

function F() {
}

var x=Object.create(F);

// a minimal test
alert(x.prototype.constructor===F); // true
alert(x instanceof Function) // true
alert(typeof x) // 'object'

Es scheint, dass ein Objekt eines Typs erstellt wurde, von dem es abgeleitet ist(Entschuldigung für die schlechte Terminologie ..) Function wie ich in Firefox getestet habe, und sox istnicht aufrufbar:

x(); // x is not a function 

Ich denke darüber nach, warum es einem Konstruktor auch nicht erlaubt, als verwendet zu werdenO oder erstelle einfach einen gültigen Konstruktor.

Ich frage mich also, was Object.create mit einem Konstruktor zu tun haben soll.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage