JavaScript中类是否存在自身实例指针,可省去额外实例创建函数?
问题解答
完全可以省去自定义的CreateBanana工厂函数,JavaScript类的构造函数constructor中,this关键字默认就指向当前正在初始化的类实例,也就是你要的类似“self”的实例指针,直接把this推入存储数组即可。
实现代码
var BananaInstances = [] class Banana{ constructor() { // 实例属性需要通过this赋值,否则会变成全局变量 this.size = "huge" // 直接将当前新创建的实例推入数组 BananaInstances.push(this) } } // 直接new就会自动把实例存入数组,不需要额外调用工厂函数 const sweetBanana = new Banana() const anotherBanana = new Banana() console.log(BananaInstances.length) // 输出2,两个实例都已自动存入
优化写法(避免全局变量污染)
你还可以把实例存储数组作为类的静态属性挂载,不需要额外声明全局变量,代码更整洁:
class Banana{ // 静态属性属于类本身,所有实例共享 static Instances = [] constructor() { this.size = "huge" Banana.Instances.push(this) } } new Banana() new Banana() console.log(Banana.Instances.length) // 输出2
内容的提问来源于stack exchange,提问作者Inside_A_Matrix_Inside_A_Matri
相关产品推荐
相关产品推荐

