Можно ли применить два подкласса к одному объекту? - PullRequest
1 голос
/ 13 мая 2019

Я хотел бы создать класс в 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:

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
}

В этом случае будет отсутствовать дальнейшая группировка действий.

B:

class Student extends Person {
  // do whatever a student does
}
class FootballPlayer extends Person {
  // do whatever a footballPlayer does
}

В этой опции не будет возможности назначить более одного вида деятельности человеку.

Есть ли способ создать столько подклассов, сколько мне нравится для определенного объекта?

Теперь я разделил замыкание на несколько файлов и разместил их на сервере в соответствии с тем, какие «действия» мне нужны. Но мне не нравится это решение.

Заранее спасибо
Андре

1 Ответ

0 голосов
/ 13 мая 2019

у вас плохое понимание классов JavaScript

class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
    this.WhatFor = {};
  }
  WhatIsFor(){
    console.log('WhatFor', this.WhatFor);
  }
}

class Student extends Person {
  study(subject) {
    this.WhatFor.subject = subject;
    console.log (this.name,this.age, 'study');
  }
  driveToUniversaty(UniversatyName) {
    this.WhatFor['UniversatyName'] = UniversatyName;
    console.log (this.name,this.age, 'driveToUniversaty');
  }
  
}
class FootballPlayer extends Person {
  constructor(name, age, footballClub) {
    super(name, age);
    this.footballClub = footballClub;
  }
  playFootball() {
    console.log (this.name,this.age, 'playFootball');
  }
  driveToFootballTraining() {
    console.log (this.name,this.age, 'driveToFootballTraining');
  }
}

var Paul = new Student('Paul',24);
var John = new FootballPlayer('John',12, 'unbeatable lions' );

Paul.study('computer science');

Paul.WhatIsFor();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...