0

重複の可能性:
Javascriptでの「プロトタイプ」と「これ」の使用?

オブジェクト関数がある場合、this.something代わりにいつ使用する必要がありfunc.prototype.somethingますか?

明確にするために:

function Person()
{
   this.walk=function(){...};
}

それ以外の:

function Person()
{}
Person.prototype.walk=function(){...};

あるフォームを他のフォームの代わりに使用すると便利なのはいつですか。2つのソリューションのメリットとデメリットは何ですか?特に私がいつも使っている場合var person = new Person();

4

2 に答える 2

4

2 つのコードは実際にはまったく異なっており、異なる目的を達成しています。

最初のサンプルには、呼び出されたときにレシーバー オブジェクト ( によって参照されるオブジェクト) にプロパティを追加する関数this、またはそのプロパティが既に存在する場合はその値を更新する関数が含まれます。したがって、異なるレシーバーでその「Person」関数を呼び出すと、それらのオブジェクトが個別に更新され、それぞれが「walk」と呼ばれるプロパティを取得します。"Person" がコンストラクターとして使用される場合、新しく作成されたオブジェクトは同様に直接更新されます。

2 番目のサンプルは、メソッドを関数のプロトタイプオブジェクトに追加します。その関数が後で で呼び出されるとnew、結果の新しいオブジェクトはプロトタイプ オブジェクトからプロパティを継承します。つまり、そのようなオブジェクトは、呼び出し可能な関数である "walk" というプロパティを実際に持っているかのように扱うことができます。ただし、実際には、構成された各オブジェクトにプロパティが直接存在するわけではありません。プロトタイプ オブジェクトが JavaScript プロパティ ルックアップで果たす役割のために、それが表示されます。

于 2012-10-01T20:23:15.813 に答える
1

Personのすべてのインスタンスでこの関数が必要な場合は、を使用する必要がありますprototypeこのstackoverflowの投稿も参照してください。

于 2012-10-01T20:20:09.777 に答える