节点JS Instanciate classe A in classe B

时间:2017-03-17 18:50:24

标签: javascript node.js

我是从node.js开始的,我只是想把我的班级B用到我的A班,但似乎不行......这是我非常简单的代码,我想我做错了什么......我有2个文件(2个班级):

Poney.js:

const {DeadPool} = require('./DeadPool');

class Poney {


  constructor() {
    this.regInter = setInterval(() => this.Regeneration(), 500);
    this.energy = 0;
    this.isUnicorn = false;
  }

  Regeneration() {
    this.energy += 10;
    console.log(`Regeneration, Vitalite : ${this.Vitalite}`);
    if (this.energy > 100) {
      console.log('Evolution');
    }
  }

  KillPoney() {
    clearInterval(this.RegInter);
  }

  evolve() {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        if (this.isUnicorn = false) {
          console.log('pas une licorne');
          if(this.energy > 100) {
            resolve();
            this.energy = 0;
            this.isUnicorn = true;
            console.log('Transformation unicorn !');
          }
          else {
            console.log('Energie insuffisante');
            reject();
          }
        }
        else {
          reject();
          console.log('Already an unicorn');
        }
      }, 1000);
    });


  }


  backPoney() {                    //Retransforme les licornes en poney
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        if (this.isUnicorn = false) {
          resolve();
          this.energy = 0;
          console.log('Back Poney to Unicorn');
        }
        else {
          reject();
          console.log('Not an Unicorn');
        }


      }, 1000);
    });
  }
}

const myDeadpool = new DeadPool();



//setTimeout(() => MyPoney.killPoney(), 10000);

module.exports = {Poney};

DeadPool.js:

const {Poney} = require('./Poney');

class DeadPool {


  constructor() {

    this.regInterDead = setInterval(() => this.regeneration(), 4000 );
    this.transInter = setInterval(() => this.makeUnicorn(), 4000 );
    this.isRegenerate = false;
    this.poneys = [];
    for (var iVal = 0; iVal < 10; iVal++) {

      this.poneys.push(new Poney())
    }

  }
  makeUnicorn(){
    this.makeEvolve()
      .then(() =>  console.log('Evolve ok !'))
      .catch(() => console.log('error evolve'));
  }

  regeneration(){
    this.checkPoney()
      .then(() => console.log('Regeneration Deadpool'))
      .catch(() => console.log('Pas de regeneration'));
  }



  checkPoney() {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        var iNumPoney = Math.floor((Math.random() * 10) + 1);
        var bConard = (Math.floor((Math.random() * 1) + 1) >= 1);      // 1 chance sur 2 d'utiliser la licorne
        if (bConard){
          this.poneys[iNumPoney].backPoney()
            .then(() =>  console.log('Licorn to Poney ok'))
            .catch(() => console.log('back licorn rejected'));
          this.isRegenerate = true;
          resolve();
        }

        else{
          console.log('Je ne suis pas un conard');
          reject();
        }
      }, 1000);
    });
  }


  makeEvolve() {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        var iNumPoney = Math.floor((Math.random() * 10) + 1);
        var bGentil = (Math.floor((Math.random() * 1) + 1) > 1);      // 1 chance sur 2 de la faire evoluer
        if(bGentil) {
          poneys[iNumPoney].evolve()
            .then(() =>  console.log('TRANSFORMATION !'))
            .catch(() => console.log('Evolution impossible'));
          resolve();

        }
        else {
          console.log('Pas gentil');
          reject();
        }


      }, 1000);
    });


  }
}


module.exports = {DeadPool};

当我试图实现新的Poney时,我在Poney的构造函数中出现错误:

*"C:\Program Files (x86)\JetBrains\WebStorm 2016.3.3\bin\runnerw.exe" "C:\Program Files\nodejs\node.exe" C:\Users\Stef\Desktop\Cours\JS\Poney.js
C:\Users\Stef\Desktop\Cours\JS\DeadPool.js:19
      this.poneys[iVal] = new Poney();
                          ^
TypeError: Poney is not a constructor
    at new DeadPool (C:\Users\Stef\Desktop\Cours\JS\DeadPool.js:19:27)
    at Object.<anonymous> (C:\Users\Stef\Desktop\Cours\JS\Poney.js:74:20)
    at Module._compile (module.js:571:32)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)
    at Function.Module._load (module.js:439:3)
    at Module.runMain (module.js:605:10)
    at run (bootstrap_node.js:422:7)
    at startup (bootstrap_node.js:143:9)*

感谢您的帮助..

1 个答案:

答案 0 :(得分:1)

正如我评论的那样,你的通告要求引起了一个问题。

尝试在实例化DeadPool时将Poney类传递给DeadPool。

  1. 从DeadPool中删除const {Poney} = require('./Poney');
  2. const myDeadpool = new DeadPool();更改为const myDeadpool = new DeadPool(Poney);
  3. 更改Deadpool构造函数以接受Poney constructor(Poney) {
  4. 有很多方法可以做到,这只是一个基本的例子。