ホームページ > ウェブフロントエンド > jsチュートリアル > Crockford のプロトタイプ継承パターンでネストされたオブジェクトを上書きするとプロトタイプに影響が出るのはなぜですか?

Crockford のプロトタイプ継承パターンでネストされたオブジェクトを上書きするとプロトタイプに影響が出るのはなぜですか?

DDD
リリース: 2024-12-09 15:46:11
オリジナル
173 人が閲覧しました

Why Does Overwriting Nested Objects in Crockford's Prototypal Inheritance Pattern Affect the Prototype?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート