3

授業がある

function Foo(a) {
  this.a = a;
  this.bar = function () {
    console.log(this.a);
  };
  this.buz = function () {
    this.a();
    console.log('bzz');
  };
}

このクラスのインスタンスはかなりたくさんあります。メソッドをプロトタイプに移動する必要がありますか?

function Foo(a) {
  this.a = a;
}
Foo.prototype = {
  bar: function () {
    console.log(this.a);
  },
  buz: function () {
    this.a();
    console.log('bzz');
  }
}
4

3 に答える 3

6

はい。sharedこれにより、クラスをインスタンス化するたびに各メソッドが再作成されるのではなく、メモリが節約されます。

コンストラクター内のメソッドは、コンストラクター内にアクセスできるため、プライベート変数にアクセスする必要がある場合にのみ使用する必要があると見なさprivileged methodsれます。private variables

特権メソッドに関するCrockford

于 2012-07-31T18:47:45.950 に答える
1

クラスメソッドを配置することは、メモリを節約するための良いアイデアです。各オブジェクトに多数のインスタンスがあるのではなく、プロトタイプにはメソッドのインスタンスが1つだけあります。

于 2012-07-31T18:48:21.760 に答える
1

JSのコンストラクター内でメソッドを定義する唯一の理由は、「特権」メソッドを作成することです。

アイデアは、公開されているが、プライベートインスタンス変数にアクセスできるメソッドを作成することです。

于 2012-07-31T18:51:16.037 に答える