2016-10-03 15 views
0

私は最近、Javascriptでプロトタイプについて学び始めました。私はプロトタイプにメソッドを追加する利点について混乱しています。ここで私は、円の面積を計算するJavascriptオブジェクトプロトタイプの利点?

一つの方法は、この

function Circle(radius, area){ 
    this.radius = radius; 
    this.area = (radius*radius*Math.PI); 
} 

ようなものでしたが、その後、別の方法があるこれは何

function Circle(radius, area){ 
    this.radius = radius; 
} 

Circle.prototype.area = function(){ 
    return this.radius*this.radius*Math.PI 
} 

ようなものだろうと考えています何の例です。領域メソッドをプロトタイプの一部にする利点は、コンストラクタに直接メソッドを置くことよりもですか?

+1

コンストラクタにメソッドを配置していません。もしあれば、各インスタンスに対して新しいメソッドを作成するのではなく、プロトタイプメソッドをすべてのインスタンスで使用できるという利点があります。 –

+0

コンストラクタにアクセスできないネイティブ関数にメソッドを追加したい場合はどうすればいいでしょうか。 –

+1

これは単なる悪い例です(混乱している実装/引数で)。しかし、基本的には文字列を考えてみてください...文字列にプロトタイプメソッドを持つ "like"?それが「利点」です。 – Amit

答えて

0

領域メソッドをプロトタイプの一部として作成し、メソッドをコンストラクタに直接配置する利点は何ですか?

コンストラクタにメソッドを入れずに、既に計算された領域値を代入します。エリアメソッドには以下の利点があります。

  • 半径が変更されても現在の値が計算されます。
  • エリアを外部コードで間違った値に変更することはできません。
  • オブジェクトを使用するコードに影響を与えずに、内部的に使用される単位を変更することができます。
  • これらのオブジェクトの膨大な量がある場合は、それは(うまくいけば)必要なメモリが少なくて済みます。