Javascript 这是指它所属的类,而不是从中调用实例的类
我想使用类ElPush将元素推送到itemLog数组中,该数组存在于下面给出的类ActiveItem中Javascript 这是指它所属的类,而不是从中调用实例的类,javascript,oop,this,Javascript,Oop,This,我想使用类ElPush将元素推送到itemLog数组中,该数组存在于下面给出的类ActiveItem中 class ElPush { pushElement(type) { document .querySelector(`#${type}-projects`) .querySelectorAll("li") .forEach((el) => { this.itemLog.push(el); }
class ElPush {
pushElement(type) {
document
.querySelector(`#${type}-projects`)
.querySelectorAll("li")
.forEach((el) => {
this.itemLog.push(el);
});
}
}
这this.itemLog.push(el)行抛出错误无法读取未定义的属性“push”
我知道这不是一个切实可行的解决方案,但我只是在实践opp概念,我非常希望提供任何解决方案
/-仍然基于类,以便OP能够识别。
//-应重构查询部分
//作为简单的助手/实用程序功能。
//
类ProjectItemQuery{
查询(类型){
从(文档)返回数组.from
.querySelector(`${type}-projects`)
.querySelectorAll(“li”)
);
}
}
//重构查询助手。
函数查询项目(类型){
从(文档)返回数组.from
.querySelector(`${type}-projects`)
.querySelectorAll(“li”)
);
}
类活动项{
构造函数(){
const itemQuery=新建ProjectItemQuery;
this.list=itemQuery.query(“活动”);
//this.list=查询项目(“活动”);
log('ActiveItems::list:',this.list);
}
}
类完成数据项{
构造函数(){
this.list=查询项目(“完成”);
log('FinishedItems::list:',this.list);
}
}
类应用程序{
静态init(){
常量activeItemList=(新的ActiveItems).list;
const finishedItemList=(新FinishedItems).list;
log('App::init::activeItemList:',activeItemList');
log('App::init::finishedItemList:',finishedItemList');
}
}
App.init()代码>
.as控制台包装{最小高度:100%!重要;顶部:0;}
福
酒吧
- 巴兹
- 生意
/-仍然基于类,以便OP能够识别。
//-应重构查询部分
//作为简单的助手/实用程序功能。
//
类ProjectItemQuery{
查询(类型){
从(文档)返回数组.from
.querySelector(`${type}-projects`)
.querySelectorAll(“li”)
);
}
}
//重构查询助手。
函数查询项目(类型){
从(文档)返回数组.from
.querySelector(`${type}-projects`)
.querySelectorAll(“li”)
);
}
类活动项{
构造函数(){
const itemQuery=新建ProjectItemQuery;
this.list=itemQuery.query(“活动”);
//this.list=查询项目(“活动”);
log('ActiveItems::list:',this.list);
}
}
类完成数据项{
构造函数(){
this.list=查询项目(“完成”);
log('FinishedItems::list:',this.list);
}
}
类应用程序{
静态init(){
常量activeItemList=(新的ActiveItems).list;
const finishedItemList=(新FinishedItems).list;
log('App::init::activeItemList:',activeItemList');
log('App::init::finishedItemList:',finishedItemList');
}
}
App.init()代码>
.as控制台包装{最小高度:100%!重要;顶部:0;}
福
酒吧
- 巴兹
- 生意
当您在ElPush.pushElement
内部使用ActiveItem
方法时,您必须在那里传递ActiveItem
实例,或者将各自的容器属性添加到ElPush
中,我不明白;itemLog不是ElPush的属性;为什么希望这样做?如果OP希望保持基于类的方法,那么itemLog
应该是任何ElPush
实例的属性,而不是ActiveItem
实例的属性。后者中的日志记录(如示例代码所示)应该是console.log(elPush.itemLog)
。任何保持itemLog
任何ActiveItem
实例属性的方法都必须通过其他(而不是基于类的)组合技术提供push
功能。实际上,需要ElPush的类有多个,因此每个类的itemLog应该不同,我只想使用同一个ElPush类根据pushElement的类型参数在不同的项目日志中推送不同的元素。@abhinaykhalatkar。。。“…我只想使用相同的ElPush类,根据pushElement的类型参数在不同的项日志中推送不同的元素。”。。。但是这个任务根本不需要类抽象。一个简单的帮助器/实用程序函数已经足够完成这项工作了。当您在ElPush.pushElement
中使用ActiveItem
方法时,您要么在那里传递ActiveItem
实例,要么将各自的容器属性添加到ElPush
中,我不明白;itemLog不是ElPush的属性;为什么希望这样做?如果OP希望保持基于类的方法,那么itemLog
应该是任何ElPush
实例的属性,而不是ActiveItem
实例的属性。后者中的日志记录(如示例代码所示)应该是console.log(elPush.itemLog)
。任何保持itemLog
任何ActiveItem
实例属性的方法都必须通过其他(而不是基于类的)组合技术提供push
功能。实际上,需要ElPush的类有多个,因此每个类的itemLog应该不同,我只想使用同一个ElPush类根据pushElement的类型参数在不同的项目日志中推送不同的元素。@abhinaykhalatkar。。。“…我只想使用相同的ElPush类,根据pushElement的类型参数在不同的项日志中推送不同的元素。”。。。但是这个任务根本不需要类抽象。一个简单的helper/utility函数已经足够做这项工作了。我已经使用了这种返回方法,但我想知道的是,上述给定方法是否有效
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();