【发布时间】:2020-07-06 14:09:40
【问题描述】:
class ElPush {
pushElement(type) {
document
.querySelector(`#${type}-projects`)
.querySelectorAll("li")
.forEach((el) => {
this.itemLog.push(el);
});
}
}
我想使用 ElPush 类将元素推送到 itemLog 数组中,该数组存在于下面给出的 ActiveItem 类中
class ActiveItem {
constructor() {
this.itemLog = [];
const elPush = new ElPush();
elPush.pushElement("active");
console.log(this.itemLog);
}
}
class FinishedItem {
constructor() {
this.itemLog = [];
const elPush = new ElPush();
elPush.pushElement("finished");
console.log(this.itemLog);
}
}
class App {
static init() {
const activeList = new ActiveItem();
}
}
App.init();
ElPush 中的 this.itemLog.push(el); 行抛出错误 Cannot read property 'push' of undefined
我知道这不是一个实用的解决方案,但我只是在练习 opp 概念,并且非常希望提供任何解决方案
【问题讨论】:
-
当您在
ElPush.pushElement中使用ActiveItem方法时,您要么必须在那里传递ActiveItem实例,要么将相应的容器属性添加到ElPush -
我不明白; itemLog 不是 ElPush 的属性;你为什么希望这能奏效?
-
如果 OP 想要保留基于类的方法,那么
itemLog应该是任何ElPush实例的属性,而不是ActiveItem实例的属性。如示例代码所示,后者中的日志记录应为console.log(elPush.itemLog)。将itemLog保留为任何ActiveItem实例的属性的任何方法都必须通过其他非基于类的(组合)技术来提供push功能。 -
实际上有多个类需要ElPush所以每个类的itemLog应该是不同的,我想要的是使用相同的ElPush类根据Type参数在不同的item Log中推送不同的元素推元素。
-
@abhinaykhalatkar ... "... 我只想使用相同的 ElPush 类根据 pushElement 的 Type 参数在不同的项目日志中推送不同的元素。" ...但是对于这项任务,根本不需要类抽象。一个简单的辅助/实用功能已经足够完成这项工作了。
标签: javascript oop this