Was passiert in Crockfords Objekterstellungstechnik?

Es gibt nur 3 Codezeilen, und dennoch habe ich Probleme, dies vollständig zu verstehen:

Object.create = function (o) {
    function F() {}
    F.prototype = o;
    return new F();
};
newObject = Object.create(oldObject);

(vonPrototypische Vererbung)

Object.create() erstellt zunächst eine leere Funktion mit dem NamenF. Ich denke, dass eine Funktion eine Art Objekt ist. Wo ist dasF Objekt wird gespeichert? Global denke ich.

Next ouroldObject, übergeben also, wird zum Prototyp der FunktionF. Funktion (d. H. Objekt)F jetzt "erbt" von unseremoldObject, in dem Sinne, dass die Namensauflösung dadurch geleitet wird. Gut, aber ich bin gespannt, was der Standardprototyp für ein Objekt ist, Objekt? Gilt das auch für ein Funktionsobjekt?

Schließlich,F wird instanziiert und zurückgegeben und wird zu unseremnewObject. Ist dernew Betrieb hier unbedingt erforderlich? NichtF liefern schon was wir brauchen, oder gibt es einen kritischen Unterschied zwischen Funktionsobjekten und Nicht-Funktionsobjekten? Offensichtlich ist es mit dieser Technik nicht möglich, eine Konstruktorfunktion zu haben.

Was passiert das nächste MalObject.create() wird genannt? Ist globale FunktionF überschrieben? Sicherlich wird es nicht wiederverwendet, da dies zuvor konfigurierte Objekte verändern würde. Und was passiert, wenn mehrere Threads @ aufrufObject.create(), gibt es irgendeine Art von Synchronisation, um Rennbedingungen auf @ zu verhinderF?

Antworten auf die Frage(8)

Ihre Antwort auf die Frage