当前位置: 代码迷 >> JavaScript >> 改变所有的功能对应一个改变的实例
  详细解决方案

改变所有的功能对应一个改变的实例

热度:63   发布时间:2023-06-05 14:24:35.0

我有一个名为“会话”的类,其中有一个值,称为“时间”。 我想创建一个函数来更改一个实例的“时间”,并且无论创建多少实例,增量都会在其他实例之间进行划分。

例如: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); }); 

您可以保留一系列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可能是有益的。

尝试创建会话计数器并将其传递给函数,并在有条件的情况下根据计数器值执行陈述

 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);
});
  相关解决方案