Есть ли способ очистить параметры подкласса в JavaScript? - PullRequest
0 голосов
/ 09 декабря 2018

Я пытаюсь использовать подклассы в JavaScript, и я использую фильмы Marvel, чтобы сделать это.Вот мой суперкласс:

class Episode {
  constructor(title, releaseDate, storyYear, phase, order, runtime, hero){
    this.title = title;
    this.releaseDate = releaseDate;
    this.releaseMonth = parseInt(releaseDate.split('/')[0]);
    this.releaseYear = parseInt(releaseDate.split('/')[1]);
    this.episodeType = "";
    this.storyYear = storyYear;
    this.phase = phase;
    this.order = order;
    this.runtime = runtime;
    this.hours = parseInt(runtime.split(':')[0]);
    this.minutes = parseInt(runtime.split(':')[1]);
    this.hero = hero;
  }
} 

Теперь я создал 3 подкласса.Один для фильмов, один для ТВ-шоу и один для "One Shots".Таким образом, я могу добавить дополнительную информацию, такую ​​как «Сезон ТВ», «Эпизод» и DVD, частью которого является один снимок.

  class Movie extends Episode {
    constructor(title, releaseYear, storyYear, phase, order, runtime, hero){
      super(title, releaseYear, storyYear, phase, order, runtime, hero);
      this.episodeType = "Movie";
    }
  }
  class TVShow extends Episode {
    constructor(title, releaseYear, storyYear, phase, order, runtime, hero, episode){
      super(title, releaseYear, storyYear, phase, order, runtime, hero);
      this.episodeType = "TV Show";
      this.episode = episode;
    }
  }
  class OneShot extends Episode {
    constructor(title, releaseYear, storyYear, phase, order, runtime, hero){
      super(title, releaseYear, storyYear, phase, order, runtime, hero);
      this.episodeType = "One Shot";
    }
  }

Проблема, с которой я сталкиваюсь, заключается в том, что если я добавлю конструктор в исходный Эпизод, мне нужно пойти и добавить его также к каждому из подклассов.Это самый эффективный способ сделать это?

1 Ответ

0 голосов
/ 10 декабря 2018

Как @Bergi предложил, вы можете использовать список аргументов вместо того, чтобы явно определять каждый аргумент, например,

class Episode{
   constructor(args)
   {
      this.args = args;
   }
}


class Movie extends Episode{
   constructor(args){
     args.episodeType = 'Movie';
     super(args);
   }
}

// The same for all subclasses

Таким образом, вы получаете намного более чистый код и избегаете перечисления всех параметров везде.Однако вы теряете неявные определения всех аргументов и можете захотеть реализовать некоторые ограничения вручную.например, выдает ошибку, если args.title не определено или пусто.

...