¿Hay alguna manera de mantener un recuento estático de instancias a lo largo de las líneas de
class Myclass { static s = 0; // static property p = 0; // public field declaration constructor() { console.log("new instance!") this.s += 1; this.p += 1; console.log(this.s, this.p); this.i = this.s; // instance property } } let a = new Myclass(); console.log(as, ap, ai) let b = new Myclass(); console.log(bs, bp, bi)Producción
new instance! NaN 1 NaN 1 NaN new instance! NaN 1 NaN 1 NaNo son las instancias mejor rastreadas fuera de la clase, por ejemplo, en una matriz como
var instances = new Array(); class Myclass { constructor(name) { console.log("new instance!") this.name = name; this.i = instances.length; instances.push(this); } } let a = new Myclass('a'); console.log(instances.length, ai) let b = new Myclass('b'); console.log(instances.length, bi) console.log( instances[1].name )Con el resultado esperado
new instance! 1 0 new instance! 2 1 bSí, puede usar static pero no puede usar this (ya que se refiere a la instancia específica). En su lugar, utilice el nombre de clase.
class MyClass { static s = 0; // static property p = 0; // public field declaration constructor() { console.log("new instance!") MyClass.s += 1; this.p += 1; console.log(MyClass.s, this.p); this.i = MyClass.s; // instance property } } let a = new MyClass(); console.log(MyClass.s, ap, ai) let b = new MyClass(); console.log(MyClass.s, bp, bi)