2

これは動物オブジェクトのコンストラクタです。

function Animal(name, sound) {
   this.name = name;
   this.sound = sound;
   this.makeSound = function() {
       alert(sound);
   }
}

私は、開発者が代わりに Animal クラスにインスタンス メソッドを追加できることを発見しました。

Animal.prototype.makeSound = function() { alert(this.sound); };

コンストラクターから makeSound メソッドを除外します。このプロトタイプ デザイン パターンを使用する利点は何ですか?

4

3 に答える 3

8

プロトタイプ バージョンは 1 回だけ作成してメモリに格納する必要がありますが、コンストラクタ バージョンは新しい関数をメモリに作成し、それをオブジェクトと共に格納します。

それは、メモリ管理に関するものです。機能的には、ほとんど同じです。

于 2012-04-20T16:58:50.660 に答える
2

オブジェクトのインスタンスのプロトタイプが「存在」します。これらのオブジェクトの 1 つを作成すると、インスタンス化するたびにそのオブジェクトを変更するのではなく、そのデータが既に存在するように最適化されます。...そして、テジスが今言ったこと。

于 2012-04-20T16:59:48.490 に答える
1

Animal.prototype.makeSoundさらに、有用な元のメソッド ( ) へのパブリック アクセスがあります。

于 2012-09-22T14:36:34.740 に答える