如何定义类并访问类外部的用户列表数据,是否需要创建构造函数?
类内部访问外部用户列表的实现方案
这种场景推荐通过构造函数传参注入的方式实现数据访问,是更符合面向对象设计规范的做法。
首先先修正你代码中的语法错误:你定义的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
相关产品推荐
相关产品推荐

