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

时间:2019-03-02 20:40:41

标签: javascript node.js

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

示例:sess1.time = 45,sess2.time = 60,sess3.time = 50 如果我将sess1.time加5,则其他两个都会减少2。

到目前为止,这是我的代码:

http.head("http://domain.io", (res)=>{
   console.log(res.statusCode)
})

2 个答案:

答案 0 :(得分:1)

您可以保留一系列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而不是泄漏全局变量可能是有益的。

答案 1 :(得分:0)

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

 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);
});