prototype
を使用する理由
SomeClass.prototype.fn = function fn(){
console.log(this.a);
};
を使用して別のメソッドを追加しましょうか?あなたが1000個のオブジェクトを作成する場合
prototype
を使用する理由
SomeClass.prototype.fn = function fn(){
console.log(this.a);
};
を使用して別のメソッドを追加しましょうか?あなたが1000個のオブジェクトを作成する場合
いくつかの利点があります。
それはそのコンストラクタで作成されたすべてのオブジェクトを再利用、 fn
関数を作成します。これは、すべてのオブジェクト上の別々の関数よりもメモリ効率が高くなります。
プロトタイプにメソッドを追加すると、オブジェクトがそのプロトタイプへのダイナミックリンクを維持するということは、がすでに存在するのオブジェクトで使用できることを意味します。関連するすべてのオブジェクトは再利用するだけの機能を持つ
あなたは更新必要であれば、ただ一つの場所に、実行時で機能、および関連するすべてのオブジェクトを、すでに存在しているものも含めで使用される更新機能を持たせることができることを意味します。コンストラクタのprototype
プロパティで、それが利用可能持つ
は、コンストラクタで作成されていない他オブジェクト、上で使用することができることを意味します。あなたは新しいキーワードで機能のうち、
をオブジェクトの作成時に毎回すべてのオブジェクトに機能を再作成するので
Array.prototype.forEach.call(
document.querySelectorAll("div"),
function(div) {
// ...
}
);
広告3:しかし、メソッドがコンストラクタ関数内にある場合は、そのメソッドを1か所だけでも更新します。 –
@AdrianWydmanski:申し訳ありませんが、私は不明でした。ソースを変更することを考えています。私はJavaScriptのより強力な側面の1つである実行時に動的に構造を変更することについて話しています。 –
最後の1つは非常に有用なおかげです。 –
var myClass = function(){
this.a = "";
this.b = "";
this.fn = function(){
console.log(this.a);
}
};
Beauseは今、彼らはすべての共有は、同じフィールドには、何度も何度も繰り返すことになります:{ a: "", b: "", fn: myClass/this.fn() }
。
これはメモリを消費し、悪い習慣です。 fn
をclass.prototype
に委任すると、コードは繰り返されず、オブジェクトは「軽い」:{ a: "", b: "" }
ですが、依然としてfn
メソッドを使用できます。
:これはしばしばのような良い効果に使用されています。
したがって、より多くのメモリと少ないメモリを使用します。
[JavaScript .prototypeはどのように機能するのですか?](0120-18753) – alexi2
質問を更新して構文エラーを削除しました。通常のJavaScript命名標準に従ってください;コンストラクタ関数は、最初は慣習によって大文字にされます)。 'class'はキーワードであり、変数名として使うことはできません。 –
ありがとうそれは説明のためだった。 –