节点JS Instanciate类A在B类

我开始在node.js中,我只是想用我的类B到我的类A,但它似乎不工作…这是我非常简单的代码,我想我做错了什么…我有2个文件( 2class):

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的构造函数中有一个错误,当我试图instanciate新的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)* 

感谢您的帮助..

正如我所评论的,您的通函要求导致一个问题。

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

  1. 删除const {Poney} = require('./Poney'); 来自DeadPool。
  2. 改变const myDeadpool = new DeadPool(); const myDeadpool = new DeadPool(Poney);
  3. 改变死亡构造函数采取在Poney constructor(Poney) {

有很多方法可以做到这一点,这只是一个基本的例子。