JavaScript类方法无法访问构造函数传入参数问题求解
问题根源
groupOptions是GroupBox构造函数的局部形参,仅在构造函数执行的上下文中有效。你将DOM逻辑抽离为独立类方法后,方法不在构造函数的作用域内,自然无法直接访问这个局部参数。之前逻辑写在构造函数里时,和参数处于同一作用域,所以可以正常运行。- 你传入的
container、subjects、subjectIcons等属性,没有挂载到GroupBox的实例对象(也就是this)上,所以类方法中调用this.subjectIcons这类属性自然返回undefined。
修复方案
- 先在
GroupBox的构造函数中,将需要用到的所有入参属性挂载到实例上:
class GroupBox extends Box { constructor(groupOptions) { super({ name: groupOptions.name, type: groupOptions.type, logo: groupOptions.logo, }); this.subjectBoxes = []; this.name = groupOptions.name; this.type = groupOptions.type; this.logo = groupOptions.logo; // 新增:把需要用到的额外属性挂载到实例 this.container = groupOptions.container; this.subjects = groupOptions.subjects; this.subjectIcons = groupOptions.subjectIcons; this.headers = groupOptions.headers; this.createGroupBox(); }
- 将
createGroupBox方法中所有用到groupOptions.xxx的地方,替换为this.xxx即可:groupOptions.subjects改为this.subjectsgroupOptions.container改为this.container
额外优化点
你遍历图标的循环中手动加了i++,for...in遍历本身会自动递增索引,这个多余的操作会导致你跳过一半的图标渲染,可以直接删除。
内容的提问来源于stack exchange,提问作者Mickey Vershbow
相关产品推荐
相关产品推荐

