Как я могу добавить больше информации в метод, который наследуется от другого класса конструктора без замены этой информации на новую? - PullRequest
0 голосов
/ 28 января 2020

Я создаю класс конструкции Person, который имеет свойства и методы. Затем я создал другой конструктор Class Teacher, который наследует от Person и имеет собственные свойства. То, что я хотел, это восстановить информацию о методеreeting () Person (), но также добавить дополнительную информацию из свойств Teacher (). Если я ничего не делаю, он обычно наследует метод приветствия (), но я хочу добавить дополнительную информацию, поэтому я подумал написать еще раз приветствие () в конструкторе класса Teacher (). Случилось так, что новый метод приветствия () в классе Учителя заменил другой метод приветствия () из класса Персона. Я хочу добавить, а не заменить одно на другое.

это мой код:

 class Person{
        constructor(first, last, age, gender, interests){
            this.name={
                first,
                last
            };

            this.age = age;
            this.gender = gender;
            this.interests = Array.isArray(interests) ? interests : [ interests ]

        }


        greeting(){
            let hobbie = this.interests.join(', ');
             return `Hi. I'm ${this.name.first} I am ${this.age} . I like ${hobbie}`;
        }

        farewell(){
            return `${this.name.first} has left the building. Bye for now!`;
        }
    }



    class Teacher extends Person{
        constructor(first, last,age, gender, interests, subject, grade){

            super(first, last,age,gender,interests);

            this._subject = subject;
            this.grade = grade;

        }

        *//here I wanted to add this information into the other that already exists .not replace on from another*
        greeting(){
                return `I am ${this._subject} teacher , I teach ${this.grade} grade `
        }


        get subject(){
            return this._subject;
        }

        set subject(newSubject){
            this._subject = newSubject;
        }
    }

    let snape = new Teacher('Severus', 'Snape', 45, 'male',['Potions','anoying students','using Sectumsempra on my enimies'], 'Dark arts', 5)

Ответы [ 2 ]

1 голос
/ 28 января 2020

В Teacher вы можете использовать super для вызова методов родительского класса.

greeting(){
    return `${super.greeting()} I am ${this._subject} teacher , I teach ${this.grade} grade`;
}

Обратите внимание, что это не будет работать с методами stati c.

1 голос
/ 28 января 2020

Вы можете использовать super для вызова метода родителя (так же, как вы вызывали конструктор Person через Teacher), например:

class Person {
  constructor(first, last, age, gender, interests) {
    this.name = {
      first,
      last
    };

    this.age = age;
    this.gender = gender;
    this.interests = Array.isArray(interests) ? interests : [interests]

  }


  greeting() {
    let hobbie = this.interests.join(', ');
    return `Hi. I'm ${this.name.first} I am ${this.age} . I like ${hobbie}`;
  }

  farewell() {
    return `${this.name.first} has left the building. Bye for now!`;
  }
}



class Teacher extends Person {
  constructor(first, last, age, gender, interests, subject, grade) {

    super(first, last, age, gender, interests);

    this._subject = subject;
    this.grade = grade;

  }
  
  // Call super.greeting() here
  greeting() {
    return `${super.greeting()} I am ${this._subject} teacher , I teach ${this.grade} grade `
  }


  get subject() {
    return this._subject;
  }

  set subject(newSubject) {
    this._subject = newSubject;
  }
}

let snape = new Teacher('Severus', 'Snape', 45, 'male', ['Potions', 'anoying students', 'using Sectumsempra on my enimies'], 'Dark arts', 5)
console.log(snape.greeting())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...