我正在努力在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 回答
正如@Bergi建议您可以使用参数列表而不是显式定义每个参数,例如
通过这种方式,您可以获得更清晰的代码并避免将所有参数列出到处 . 但是,您将丢失所有参数的隐式定义,并且可能希望手动实现某些约束 . 例如如果
args.title
未定义或为空,则抛出错误 .