ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript のプロトタイプ配列がインスタンス間で共有されるのはなぜですか?
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 = []; }
ここでは、成分プロパティが新しく作成された各インスタンスに割り当てられ、他のインスタンスから区別され、分離されています。
共有データとインスタンス固有のデータ:
一般的なルールは、コンストラクター内でインスタンス固有のデータを割り当て、コンストラクター内の共有データ (メソッドなど) を割り当てることです。プロトタイプ。これにより、アクセスの制御とオブジェクト作成の柔軟性が可能になります。
追加メモ:
以上がJavaScript のプロトタイプ配列がインスタンス間で共有されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。