JavaScript类中无需构造函数外部传入的变量最佳声明位置
解决JavaScript类内初始化内部数组的问题
嘿,我来帮你搞定这个问题~首先先纠正下你示例代码里的两个小问题:一是do_something的方法语法不对,不能把this.a作为参数写在方法定义里;二是JavaScript数组没有append方法,应该用push。
回到你的核心问题:要在类内初始化arr且无需外部调用,有两种常见的实现方式,取决于你需要每个实例独立拥有arr还是所有实例共享同一个arr:
1. 实例级别的数组(每个实例单独拥有)
如果每个A的实例都需要自己的arr,互不干扰,你可以用类字段语法直接在类体里声明初始化,或者在构造函数里初始化:
方式A:类字段语法(ES6+支持)
class A { // 直接在类内初始化实例属性arr,每个实例都会有自己的空数组 arr = []; constructor(a, b) { this.a = a; this.b = b; } do_something() { const c = this.a + this.b; this.arr.push(c); // 用this访问当前实例的arr return this.arr; } } // 测试 const instance1 = new A(1, 2); console.log(instance1.do_something()); // [3] const instance2 = new A(3, 4); console.log(instance2.do_something()); // [7]
方式B:构造函数内初始化
如果你的环境不支持类字段语法,也可以在构造函数里添加this.arr = []:
class A { constructor(a, b) { this.a = a; this.b = b; this.arr = []; // 在这里初始化实例的arr } do_something() { const c = this.a + this.b; this.arr.push(c); return this.arr; } }
2. 静态数组(所有实例共享)
如果希望所有A的实例共用同一个arr,就需要把arr声明为静态属性:
class A { // 静态属性,属于类本身,所有实例共享 static arr = []; constructor(a, b) { this.a = a; this.b = b; } do_something() { const c = this.a + this.b; A.arr.push(c); // 访问静态属性需要用类名A,而不是this return A.arr; } } // 测试 const instance1 = new A(1, 2); console.log(instance1.do_something()); // [3] const instance2 = new A(3, 4); console.log(instance2.do_something()); // [3,7]
这样不管是哪种方式,arr都完全封装在类内部,不需要从外部调用或传入,完美符合你的需求~
内容的提问来源于stack exchange,提问作者user11744770
相关产品推荐
相关产品推荐

