Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用类的属性值基于时间影响另一个类对象_Javascript_Node.js_Oop - Fatal编程技术网

Javascript 使用类的属性值基于时间影响另一个类对象

Javascript 使用类的属性值基于时间影响另一个类对象,javascript,node.js,oop,Javascript,Node.js,Oop,目前,我正在尝试学习如何将es6类用于我正在开发的应用程序 目标是根据当前日期增加动物的年龄 动物类 Animal.js 类动物{ 建造师(姓名、年龄、物种、性别、活动、生日、饥饿=100、耐力=100、快乐=100){ this.name=名称; 这个。年龄=年龄; 这个物种=物种; 这个。性别=性别; 这个。活动=活动; 饥饿=饥饿; 这个。耐力=耐力; 这个。快乐=快乐; 生日 } 生日(){ 这个年龄++ log(`祝${this.name}生日快乐,${this.name}现在是${t

目前,我正在尝试学习如何将es6类用于我正在开发的应用程序

目标是根据当前日期增加动物的年龄

动物类
Animal.js

类动物{
建造师(姓名、年龄、物种、性别、活动、生日、饥饿=100、耐力=100、快乐=100){
this.name=名称;
这个。年龄=年龄;
这个物种=物种;
这个。性别=性别;
这个。活动=活动;
饥饿=饥饿;
这个。耐力=耐力;
这个。快乐=快乐;
生日
}
生日(){
这个年龄++
log(`祝${this.name}生日快乐,${this.name}现在是${this.age}`)
}
}
module.exports=动物
时间班
Time.js

上课时间{
构造函数(){
这1.5秒=0;
这1.5分钟=0;
这1.5天=1;
本季=1;
本年=0;
this.clock=`${this.minutes}:${this.seconds}`;
this.monthDate=`this.season}/${this.days}`
this.yearDate=`${this.season}/${this.days}/${this.year}`
this.timeStamp=`${this.seasure}/${this.days}/${this.year}-${this.minutes}:${this.seconds}`
//启动计时器时
this.countTime=setInterval(this.increaseTime.bind(this),1000)
}
递增时间(){
this.clock=`${this.minutes}:${this.seconds}`
this.monthDate=`this.season}/${this.days}`
this.yearDate=`${this.season}/${this.days}/${this.year}`
this.timeStamp=`${this.seasure}/${this.days}/${this.year}-${this.minutes}:${this.seconds}`
console.log(this.clock)
如果(this.seconds==60){
这1.5秒=0;
这是10分钟++
如果(this.minutes==1){
这1.5分钟=0;
这几天++
console.log(this.timeStamp)
如果(this.days==15){
这1.5天=0;
这个季节++
如果(本季>4){
本季=1;
今年++
}
}
}
}否则{
这一秒++
}
}
}
module.exports=时间;
在这里,我尝试利用它们:
Zoo.js

const-Animal=require(“/动物”);
常数时间=要求(“/时间”);
设time1=新时间();
let gary=新动物(“gary”,10,“大猩猩”,“雄性”,“睡眠”,“1/2”)
如果(time1.monthDate==gary.birth){
加里生日
}
因此,基于time1.monthDate的值(它总是在变化,因为我在Time类中有一个setInterval函数),我将在Animal类中执行一个函数来增加Gary的年龄

我意识到在当前状态下,我需要不断运行此检查,因此我也尝试了以下方法:

while(时间1){
如果(time1.monthDate==gary.birth){
加里。生日();
}
}
尽管我一直在运行此检查,但这也不起作用

任何帮助都将不胜感激,提前感谢

尽管我一直在运行此检查,但这也不起作用

这是因为当循环运行时,没有其他代码可以运行。这包括增加时间的setInterval回调

相反,为什么不提供一种方法来安排对计时器滴答声的回调:

 class Time {
    constructor() {
      this.seconds = 0;
      this.minutes = 0;
      this.days = 1;
      this.season = 1;
      this.year = 0;
      this.handlers = []; // < collect handlers
      // Start timer when 
    this.countTime = setInterval(this.increaseTime.bind(this), 1000)
    }

    get clock() { // if this is a getter, it is always up to date
      return `${this.minutes}:${this.seconds}`;
    }
    get monthDate() {
       return `${this.season}/${this.days}`;
    }
    get yearDate() {
       return `${this.season}/${this.days}/${this.year}`;
    }
    get timeStamp () {  
        return  `${this.season}/${this.days}/${this.year}-${this.minutes}:${this.seconds}`;
    }

    increaseTime() {
      this.seconds++
      if (this.seconds === 60) {
        this.seconds = 0;
        this.minutes++;
      }
      if (this.minutes === 1) {
         this.minutes = 0;
         this.days++;
      }               
      if (this.days === 15) {
        this.days = 0;
        this.season++
     }
     if (this.season > 4) {
        this.season = 1;
        this.year++
     }

     this.handlers.forEach(h => h(this)); // < trigger handlers
  }

  onTick(h) { this.handlers.push(h); }
}

this.birth=birth
同时使用
birth()
方法将不起作用。我建议从
time
构造函数中删除
this.countTime=setInterval(this.increaseTime.bind(this),1000)
。相反,实例化
time1
gary
,然后创建执行
setInterval(function(){time1.increaseTime();if(time1.monthDate==gary.birth)gary.birth();},1000)的间隔
yearDate
timeStamp
增加秒数后。或者更好的是,完全删除它们,改为使用getter,这样只有当你访问它的时候,时间才会被格式化。这对我来说是成功的!现在我面临下一个挑战,我需要确保他不再衰老。谢谢
time1.onTick(() => {
  if (time1.monthDate === gary.birthday) {
    gary.birthday();
  }
});