问题描述
我有一个名为“会话”的类,其中有一个值,称为“时间”。 我想创建一个函数来更改一个实例的“时间”,并且无论创建多少实例,增量都会在其他实例之间进行划分。
例如:sess1.time = 45,sess2.time = 60,sess3.time = 50如果我将sess1.time加5,则其他两个都会减少2。
到目前为止,这是我的代码:
class Workshop { constructor(name, desc) { this.name = name; this.desc = desc; } getWork() { console.log(this.name + " " + this.desc); } } class Session extends Workshop { constructor(name, desc, time){ super(name, desc); this.time = time; } getSession() { console.log(this.name + " " + this.desc + " " + this.time); } changeTime(newTime) { let delta = this.time - newTime; this.time = newTime; } } let sessionList = [ sess1 = new Session('hummus', 'yamyam', 45), sess2 = new Session('Kabab', 'mmmmmm', 70) ] sessionList.forEach((session) => { console.log(session.time); });
1楼
Jonas Wilms
1
已采纳
2019-03-02 20:45:39
您可以保留一系列Session实例:
const sessions = []; // this is leaking though
class Session extends Workshop {
constructor(name, desc, time){
super(name, desc);
this.time = time;
sessions.push(this); // collect all created sessions
}
getSession() {
console.log(this.name + " " + this.desc + " " + this.time);
}
changeTime(newTime) {
let delta = this.time - newTime;
// apply the delta to all other sessions
for(const other of sessions) {
if(other === this) continue;
other.time -= delta / (sessions.length - 1);
}
this.time = newTime;
}
}
专门管理一组sessions
而不是泄漏全局sessions
可能是有益的。
2楼
Osama
0
2019-03-02 21:01:14
尝试创建会话计数器并将其传递给函数,并在有条件的情况下根据计数器值执行陈述
class Workshop {
constructor(name, desc) {
this.name = name;
this.desc = desc;
}
getWork() {
console.log(this.name + " " + this.desc);
}
}
class Session extends Workshop {
constructor(name, desc, time){
super(name, desc);
this.time = time;
}
getSession() {
console.log(this.name + " " + this.desc + " " + this.time);
}
changeTime(newTime,i) {
if(i==0){
let delta = this.time + newTime;
this.time = delta;
}
else {
let delta = this.time -2;
this.time = delta;
}
return this.time
}
}
let sessionList = [
sess1 = new Session('hummus', 'yamyam', 45),
sess2 = new Session('Kabab', 'mmmmmm', 70)
]
var i=0;
sessionList.forEach((session) => {
session.changeTime(5,i);
i++;
console.log(session.time);
});