ホームページ >ウェブフロントエンド >jsチュートリアル >Object.create() と new SomeFunction(): いつどの JavaScript オブジェクト作成メソッドを使用するか?
Object.create() と new SomeFunction() の違いを理解する
JavaScript には、新しいオブジェクトを作成するための 2 つのメソッドが用意されています。 Object.create () と新しい SomeFunction() です。これらは表面レベルでは似ているように見えますが、根本的な違いがあります。
Object.create()
Object.create() は、既存のオブジェクトを使用して新しいオブジェクトを作成しますそのプロトタイプとして。これは、新しく作成されたオブジェクトがプロトタイプ オブジェクトからプロパティとメソッドを継承することを意味します。
new SomeFunction()
new 演算子の後に関数呼び出しが行われ、オブジェクトの新しいインスタンス。 Object.create() とは異なり、関数のプロトタイプ プロパティを使用してプロトタイプ チェーンを確立しません。代わりに、関数自体が新しいオブジェクトのコンストラクターとして機能し、実行時に返されます。
相違点と使用シナリオ
プロトタイプの継承: Object.create() はプロトタイプの継承を可能にし、オブジェクトがそのプロトタイプから動作とプロパティを継承できるようにします。これは、共有機能を持つオブジェクトの階層を作成する場合に便利です。 new SomeFunction() はプロトタイプ チェーンを作成しません。
コンストラクター関数: new SomeFunction() では、新しく作成されたオブジェクトの初期化と構成に使用できるコンストラクター関数を使用できます。 Object.create() はこの機能を提供しません。
スコープの処理: Object.create() は字句スコープに依存します。つまり、プロトタイプ オブジェクト内で定義されたネストされた関数がアクセスできることになります。外側のスコープへ。 new SomeFunction() はブロック スコープを使用し、入れ子になった関数が外側のスコープにアクセスできないようにします。
例
次のコードを考えてみましょう:
var test = { val: 1, func: function() { return this.val; } }; var testA = Object.create(test); testA.val = 2; console.log(test.func()); // 1 console.log(testA.func()); // 2
ここでは、Object.create() を使用してプロトタイプ チェーンを確立します。 testA は test.
var otherTest = function() { this.val = 1; this.func = function() { return this.val; }; }; var otherTestA = new otherTest(); var otherTestB = new otherTest(); otherTestB.val = 2; console.log(otherTestA.val); // 1 console.log(otherTestB.val); // 2
のプロパティとメソッドを継承します。この例では、new SomeFunction() を使用して otherTest 関数の 2 つのインスタンスを作成します。これらはプロトタイプ チェーンを共有せず、別個のオブジェクトとみなされます。
結論
Object.create() と new SomeFunction() は、JavaScript では異なる目的を果たします。 Object.create() はプロトタイプの継承を確立しますが、新しい SomeFunction() はコンストラクター関数の使用を許可し、明示的なプロトタイプ チェーンの必要性を排除します。どのメソッドを使用するかは、アプリケーションで必要な特定の要件と継承パターンによって異なります。
以上がObject.create() と new SomeFunction(): いつどの JavaScript オブジェクト作成メソッドを使用するか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。