コンストラクターの方法は非常に便利ですが、メモリの無駄があります
プロトタイプによって割り当てられた関数は、すべてのオブジェクトによって共有されます。
プロトタイプによって割り当てられた属性は独立しています。-----属性を変更しない場合、それらは共有されます
すべてのオブジェクトに同じ関数を使用したい場合は、メモリを保存するプロトタイプメソッドを使用して関数を追加することをお勧めします。
例:
// ----コンストラクターモード
CATオブジェクトに変更されていない属性「タイプ」を追加してから、メソッド(食べる)を追加します。次に、プロトタイプオブジェクト猫が次のようになります。
<script> function cat(name、color){this.name = name; this.color = color; this.type = "feat"; this.eat = function(){alert( "Eat Mouse"); }; } // generate例:var cat1 = new cat( "Big Hair"、 "Yellow"); var cat2 = new Cat( "Eat Er Hair"、 "Black"); alert(cat1.type); // feat cat1.eat(); //マウスアラートを食べる(cat1.eat == cat2.eat); // false </script>つまり、各インスタンスオブジェクトの場合、型属性とEAT()メソッドはまったく同じコンテンツです。インスタンスが生成されるたびに、コンテンツを繰り返し、より多くのメモリを占有する必要があります。これは環境にやさしくも効率的でもありません。
// ----プロトタイプモード
JavaScriptは、各コンストラクターが別のオブジェクトを指すプロトタイプ属性を持っていることを規定しています。このオブジェクトのすべてのプロパティとメソッドは、コンストラクターのインスタンスによって継承されます。
これは、プロトタイプオブジェクト上のこれらの変更されていないプロパティとメソッドを直接定義できることを意味します。
<script> function cat(name、color){this.name = name; this.color = color; } cat.prototype.type = "female"; cat.prototype.eat = function(){alert( "eat mouse")}; //インスタンスを生成します。 var cat1 = new Cat( "Big Hair"、 "Yellow"); var cat2 = new Cat( "2髪"、 "黒"); alert(cat1.type); // cat cat1.eat(); //マウスアラートを食べる(cat1.eat == cat2.eat); // truef </script>この時点で、すべてのインスタンスの型属性とEAT()方法は、実際にはメモリアドレスであり、プロトタイプオブジェクトを指しているため、操作効率が向上します。
JSコンストラクターとプロトタイプのプロトタイプの違いの上記の紹介は、私があなたと共有するすべてのコンテンツです。参照を提供できることを願っています。wulin.comをもっとサポートできることを願っています。