首页 文章

有没有办法在javascript中清理子类参数?

提问于
浏览
0

我正在努力在JavaScript中使用子类,我正在使用漫威电影来完成它 . 这是我的超类:

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个子类 . 一部用于电影,一部用于电视节目,一部用于“一次拍摄” . 通过这种方式,我可以添加额外的信息,例如电视季节,剧集以及单拍的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

    正如@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 未定义或为空,则抛出错误 .

相关问题