В одном файле он работает, в двух файлах я получил ошибку - PullRequest
0 голосов
/ 29 января 2020

У меня такой же код, но с одной стороны он работает, а с другой - нет. Когда я помещаю этот код в один файл, он работает, но когда я использую импорт с babel, я получаю сообщение об ошибке. Пример кода:


class Mob {
  constructor(name) {
    this.name = name;
    this.health = 100;
  }
  getHealth() {
    return this.health;
  }
  weather() {
    game.setWeather('rainbow');
    console.log(game.weather);
  }

}

class World {
  constructor(name) {
    this.name = name;
    this.weather = 'rain';
    this.monsters = {};

  }

 addMonster(name) {
   const monster = new Mob(name);
   this.monsters['1'] = monster;
 }

 setWeather(weather) {
   this.weather = weather;
 }
 play() {
   this.addMonster('dragon');
   this.monsters['1'].weather();
 }
}

Но когда я разделю его на два файла, вроде этого:

World. js:

import Mob from './Mob';


export default class World {
    constructor(name) {
      this.name = name;
      this.weather = 'rain';
      this.monsters = {};

    }

   addMonster(name) {
     const monster = new Mob(name);
     this.monsters['1'] = monster;
   }

   setWeather(weather) {
     this.weather = weather;
   }
   play() {
     this.addMonster('dragon');
     this.monsters['1'].weather();


   }
  }

Моб. js:

export default class Mob {
    constructor(name) {
      this.name = name;
      this.health = 100;
    }
    getHealth() {
      return this.health;
    }
    weather() {
      game.setWeather('rainbow');
      console.log(game.weather);
    }

  }

И импортируйте его как:

import World from './game_manager/World';

const game = new World;
game.play();


У меня есть ошибка, в которой говорится игра (игра. setWeather ('rainbow')) не определено. Как я могу это исправить, если я хочу иметь этот код в двух отдельных файлах?

1 Ответ

0 голосов
/ 29 января 2020

Это потому, что переменная game не находится в области видимости, когда вы помещаете этот класс в другой файл. вам нужно передать game переменную в weather() функцию.

Требуется два изменения

в классе Mob

weather(game) {
   game.setWeather('rainbow');
   console.log(game.weather);
}

В классе World добавьте this как аргумент в weather() функции

play() {
  this.addMonster('dragon');
  this.monsters['1'].weather(this);
}

class Mob {
    constructor(name) {
      this.name = name;
      this.health = 100;
    }
    getHealth() {
      return this.health;
    }
    weather(game) {
      game.setWeather('rainbow');
      console.log(game.weather);
    }

  }




class World {
    constructor(name) {
      this.name = name;
      this.weather = 'rain';
      this.monsters = {};

    }

   addMonster(name) {
     const monster = new Mob(name);
     this.monsters['1'] = monster;
   }

   setWeather(weather) {
     this.weather = weather;
   }
   
   play() {
     this.addMonster('dragon');
     this.monsters['1'].weather(this);
   }
  }

const game = new World;
game.play();
...