コードは3行しかありませんが、これを完全に把握するのに問題があります。
Object.create = function (o) {
function F() {}
F.prototype = o;
return new F();
};
newObject = Object.create(oldObject);
(プロトタイプの継承から)
Object.create()
と呼ばれる空の関数を作成することから始めますF
。関数は一種のオブジェクトだと思います。このF
オブジェクトはどこに保存されていますか?世界的に私は推測します。次に、
oldObject
として渡されたo
、が関数のプロトタイプになりますF
。関数(つまり、オブジェクト)は、名前解決がそれを経由するという意味で、F
私たちから「継承」するようになりました。oldObject
良いですが、オブジェクトのデフォルトのプロトタイプが何であるか知りたいのですが、Object?それは関数オブジェクトにも当てはまりますか?最後に、
F
がインスタンス化されて返され、私たちのになりますnewObject
。ここでのnew
操作は厳密に必要ですか?必要なものをまだ提供していませんF
か、または関数オブジェクトと非関数オブジェクトの間に重大な違いがありますか?明らかに、この手法を使用してコンストラクター関数を作成することはできません。
次回Object.create()
はどうなりますか?グローバル関数はF
上書きされますか?以前に構成されたオブジェクトが変更されるため、再利用されないことは確かです。また、複数のスレッドが呼び出された場合はどうなりますか?Object.create()
競合状態を防ぐための同期はありますF
か?