Crockford のプロトタイプ継承パターンにおけるネストされたオブジェクトの問題
Douglas Crockford のプロトタイプ継承パターンは、組み込みの "new" の簡略化された代替パターンです。 JavaScript のキーワード。ただし、このパターンを使用してネストされたオブジェクトから継承しようとすると、問題が発生する可能性があります。
この継承パターンでは、ターゲット オブジェクトのプロトタイプが別のオブジェクトに設定され、そのプロパティが継承されます。ネストされたプロパティがターゲット オブジェクトで上書きされると、変更はプロトタイプ チェーンまで伝播します。この動作は、ネストされたオブジェクトの予期される概念と矛盾します。
次の例を考えてみましょう。
var nestObj = { sex: "female", info: { firstname: "Jane", lastname: "Dough", age: 32, }, }; var person2 = Object.create(nestObj);
プロパティ person2.info.age が上書きされると、その年齢も変更されます。プロトタイプ内のネストされたオブジェクト (nestObj.info.age)。これは予期しないかもしれません。
回答によると、この動作は矛盾ではありません。ネストされたオブジェクトは別個のエンティティとはみなされません。代わりに、それらはオブジェクトの独自のプロパティであるか、プロトタイプから継承されます。ネストされたオブジェクトのプロパティ値を上書きすると、独自のプロパティと継承されたプロパティの両方に影響します。
ネストされたプロパティを個別に変更するには、新しいオブジェクト参照を割り当てる必要があります。
person2.info = { firstname: "Jane", lastname: "Dough", age: 32, };
これプロトタイプから独立した新しいネストされたオブジェクトを作成します。この新しいオブジェクトのプロパティを上書きしても、プロトタイプには影響しません。
以上がCrockford のプロトタイプ継承パターンでネストされたオブジェクトを上書きするとプロトタイプに影響が出るのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。