ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript のプロトタイプ配列がインスタンス間で共有されるのはなぜですか?

JavaScript のプロトタイプ配列がインスタンス間で共有されるのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-23 02:19:10242ブラウズ

Why Do Prototyped Arrays in JavaScript Become Shared Across Instances?

JavaScript のプロトタイプ化された配列: インスタンス間で共有

JavaScript では、プロトタイプ化により、クラスのインスタンス間で動作とデータを共有できます。ただし、配列をプロトタイピングする場合、配列はプライベートではなく、すべてのクラス インスタンス間で共有されるという独特の動作が現れます。

プロトタイピングの仕組み:

オブジェクトのプロトタイプ新しいオブジェクトを作成するための青写真として機能します。プロトタイプで定義されたプロパティとメソッドは、それを継承するすべてのオブジェクトからアクセスできます。この概念は、インスタンスがプロパティの個別のコピーを持つクラスベースの言語とは異なります。

次の例では、Sandwich クラスは Sandwich.prototype オブジェクトを継承します。

function Sandwich() {

    // Uncomment to fix the problem
    //this.ingredients = [];

}
Sandwich.prototype = {

    "ingredients" : [],
    // ...
};

ここでは、成分プロパティはプロトタイプで定義されます。これは、すべてのインスタンス (チーズバーガー、blt など) がこの同じ配列を共有することを意味します。

共有配列:

プロトタイプ配列の問題は、プロトタイプ配列を変更することです。インスタンスの配列は他のすべてに影響します。質問に示されている例に見られるように、これにより予期しない動作が発生する可能性があります。 Cheeseburger.ingredients または blt.ingredients が変更されると、Sandwich.prototype から継承された同じ共有配列が変更されます。

共有を避ける方法:

プライベートを作成するには各インスタンスの配列では、コンストラクター内でプロパティを定義します。プロトタイプ:

function Sandwich() {
    this.ingredients = [];
}

ここでは、成分プロパティが新しく作成された各インスタンスに割り当てられ、他のインスタンスから区別され、分離されています。

共有データとインスタンス固有のデータ:

一般的なルールは、コンストラクター内でインスタンス固有のデータを割り当て、コンストラクター内の共有データ (メソッドなど) を割り当てることです。プロトタイプ。これにより、アクセスの制御とオブジェクト作成の柔軟性が可能になります。

追加メモ:

  • プロトタイプ プロパティは、プロトタイプ オブジェクトへのポインターを介して内部的に参照されます。
  • オブジェクトのプロトタイプへのアクセスは、次を使用して可能です。 Object.getPrototypeOf(obj).
  • この動作は JavaScript のプロトタイプ継承に固有のものであり、クラスベース言語には適用されません。

以上がJavaScript のプロトタイプ配列がインスタンス間で共有されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。