Javascript 可以对一个对象应用两个子类吗?

Javascript 可以对一个对象应用两个子类吗?,javascript,class,closures,Javascript,Class,Closures,我想在JavaScript中创建一个类,该类稍后由多个子类扩展 我能够为我需要的创建一个闭包,但由于代码越来越多,拥有一个大文件变得越来越模糊 假设我有一个人。 一个人可以是学生,足球运动员,… 但一个人也可以是学生和足球运动员 我有一个可以代表这一点的工作闭包: var jack = ( function() { var name = jack; var age = 24; return { student: function() { v

我想在JavaScript中创建一个类,该类稍后由多个子类扩展

我能够为我需要的创建一个闭包,但由于代码越来越多,拥有一个大文件变得越来越模糊

假设我有一个人。
一个人可以是学生,足球运动员,…
但一个人也可以是学生和足球运动员

我有一个可以代表这一点的工作闭包:

var jack = (
  function() {
    var name = jack;
    var age = 24;
    return {
      student: function() {
        var subject = 'computer science'
        return {
          driveToUniversaty: function() {
            // drive for a while...
          },
          study: function() {
            // read books and stuff...
          },
        }
      },
      footballPlayer: function() {
        var footballClub = 'unbeatable lions'
        return {
          driveToFootballTraining: function() {
            // drive for a while in a different direction...
          },
          playFootball: function() {
            // kick a ball with the guys
          },
        }
      },
    }
  }
)();
我现在尝试使用js类来实现这一点。这是基础:

class Person {
  constructor(name, age) {
    this.name = name
    this.age = age
  }
}
据我所知,我通常有两种方法来扩展这个类

A:

这将缺乏进一步的活动分组

B:

这种选择将不可能将一项以上的活动分配给一个人

有没有一种方法可以为某个对象创建尽可能多的子类

我现在已经将闭包拆分为多个文件,并根据我需要的“活动”将它们放在服务器上。 但我不喜欢这个解决方案

提前感谢

André

您对javascript类的理解很差

班级人员{
建造师(姓名、年龄){
this.name=名称;
这个。年龄=年龄;
this.WhatFor={};
}
WhatIsFor(){
console.log('WhatFor',this.WhatFor);
}
}
班级学生延伸人{
研究(科目){
this.WhatFor.subject=主题;
console.log(this.name,this.age,'study');
}
DriveToUniversity(UniversatyName){
这个.what for['UniversatyName']=UniversatyName;
console.log(this.name,this.age,'driveToUniversity');
}
}
职业足球运动员延伸人{
建造商(姓名、年龄、足球俱乐部){
超级(姓名、年龄);
this.footballClub=足球俱乐部;
}
踢足球{
console.log(this.name,this.age,'playbotball');
}
DriveToFootball培训(){
console.log(this.name,this.age,'driveToFootballTraining');
}
}
var Paul=新生(“Paul”,24岁);
var John=新足球运动员(“约翰”,12岁,“无敌狮子”);
Paul.study(“计算机科学”);

保罗:什么意思您对javascript类的理解很差

班级人员{
建造师(姓名、年龄){
this.name=名称;
这个。年龄=年龄;
this.WhatFor={};
}
WhatIsFor(){
console.log('WhatFor',this.WhatFor);
}
}
班级学生延伸人{
研究(科目){
this.WhatFor.subject=主题;
console.log(this.name,this.age,'study');
}
DriveToUniversity(UniversatyName){
这个.what for['UniversatyName']=UniversatyName;
console.log(this.name,this.age,'driveToUniversity');
}
}
职业足球运动员延伸人{
建造商(姓名、年龄、足球俱乐部){
超级(姓名、年龄);
this.footballClub=足球俱乐部;
}
踢足球{
console.log(this.name,this.age,'playbotball');
}
DriveToFootball培训(){
console.log(this.name,this.age,'driveToFootballTraining');
}
}
var Paul=新生(“Paul”,24岁);
var John=新足球运动员(“约翰”,12岁,“无敌狮子”);
Paul.study(“计算机科学”);
保罗:什么意思!!
Person.prototype.driveToUniversaty = function() {
  // drive for a while...
}
Person.prototype.study = function() {
  // read books and stuff...
}
Person.prototype.driveToFootballTraining = function() {
  // drive for a while in a different direction...
}
Person.prototype.playFootball = function() {
  // kick a ball with the guys
}
class Student extends Person {
  // do whatever a student does
}
class FootballPlayer extends Person {
  // do whatever a footballPlayer does
}