You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 17:43:11