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

如何定义类并访问类外部的用户列表数据,是否需要创建构造函数?

类内部访问外部用户列表的实现方案

这种场景推荐通过构造函数传参注入的方式实现数据访问,是更符合面向对象设计规范的做法。

首先先修正你代码中的语法错误:你定义的user数组里,name属性的字符串值缺少闭合引号,修正后写法如下:

let user = [
  {id:1,name:"username"},
  {id:2,name:"username"},
]

如果你确认类和user数组定义在同一作用域下,类内部本来可以直接访问user变量,访问不到大概率是作用域隔离导致的(比如两者在不同模块、被不同函数作用域包裹没有暴露变量),这种场景下用构造函数注入是最优解,实现示例如下:

class ClassName {
  // 构造函数接收外部传入的用户列表,挂载到实例属性上
  constructor(userList) {
    this.userList = userList
  }

  getuser() {
    // 类内方法通过this.userList访问数据
    return this.userList
  }

  deleteuser(userId) {
    this.userList = this.userList.filter(item => item.id !== userId)
  }
}

// 实例化类的时候,把外部的user数组作为参数传入
const userOperator = new ClassName(user)

这种实现方式的优势很明显:

  • 解耦类和全局变量,类的复用性更高,后续如果要操作多组不同的用户列表,只需要传入不同的数组实例化多个对象即可,不需要修改类内部代码
  • 可测试性更强,单元测试时可以直接传入模拟的用户数据,不需要依赖全局环境的变量
  • 完全规避作用域差异导致的访问失败问题,只要实例化传参正确,类内部就可以正常拿到数据

如果你不想用构造函数,也可以选择把用户列表挂载为类的静态属性、或者实例化后手动给实例赋值用户列表属性,但这两种写法的规范性和可维护性都不如构造函数注入。

内容的提问来源于stack exchange,提问作者Vahid Afshari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:27:05