10

これにはすでに答えがあると思っていましたが、見つけられないようです.Javascriptでこのクラスのすべてのインスタンスで特定のクラスメソッドを実行するにはどうすればよいですか?

これは、インスタンスの名前がわからない状況で行う必要があります。クラス内で何らかの静的変数を使用してすべてのインスタンスを格納できると思いますが、これはJSには存在しないようです

では、クラスの既存のすべてのインスタンスでメソッドを呼び出す方法は? 注:明確にするために:私はCSSクラスについて話しているのではなく、オブジェクトについて話している.

編集:Javascriptのクラスでは、関数で新しいオブジェクトを作成することを意味します:

function something()
{
}

var instance = new something();
4

6 に答える 6

14

静的配列を作成し、コンストラクター関数に格納できます。

MyClass.allInstances = [];
MyClass.allInstances.push(this);

ただし、この配列からインスタンスをいつ削除するかを判断する何らかの方法が必要です。そうしないと、メモリ リークが発生します。

于 2013-10-22T19:24:22.063 に答える
7

返信が遅くなって申し訳ありませんが、これを達成しようとしていることに気づきました。これはより簡単な答えかもしれません。

クラス MyClass のすべてのインスタンスが必要で、トップ ウィンドウ レベルで作成されたインスタンスのみを取得するとします (クロージャ内で作成されたインスタンスは含まれません)。

for (var member in window)
{
    if (window[member] instanceof MyClass)
        console.info(member + " is instance of MyClass");
}
于 2015-02-19T18:06:31.380 に答える
2

インスタンスのリストを自分で保存する必要があります。

function someClass(param) {

  // add to all
  if (this.constructor.all === undefined) {
    this.constructor.all = [this];
  } else {
    this.constructor.all.push(this);
  }

  // set param
  this.logParam = function() { console.log(param); };
}

var instance1 = new someClass(1);
var instance2 = new someClass(2);

for (var i = 0; i < someClass.all.length; i++) {
  someClass.all[i].logParam();
}

メモリ リークが懸念される場合は、インスタンスの使用が完了したときにインスタンスを削除するメソッドを作成できます。

function someClass(param) {

  ...

  this.destroy = function() {
    var all = this.constructor.all;
    if (all.indexOf(this) !== -1) {
      all.splice(all.indexOf(this), 1);
    }
    delete this;
  }
}
于 2013-10-22T20:06:59.690 に答える