Почему мой дочерний класс не может использовать унаследованную функцию от родительского класса?

#javascript #node.js

#javascript #node.js

Вопрос:

Я использую Javascript и nodejs (node_modules?). Почему дочерний класс Student не может получить доступ к установщику socialSecNum из родительского класса? Функция регулярных выражений работает просто отлично, когда я использую ее из родительского класса?

 class Person {
  constructor(firstName, lastName, sosialSecNum) {
    this.firstName = firstName;
    this.lastName = lastName;
    this.sosialSecNum = sosialSecNum;
  }
  get firstName() {
    return this._firstName;
  }
  set firstName(newFirstName) {
    this._firstName = newFirstName;
  }
  get lastName() {
    return this._lastName;
  }
  set lastName(newLastName) {
    this._lastName = newLastName;
  }
  get sosialSecNum() {
    return this._socialSecNum;
  }
  set sosialSecNum(newSocialSecNum) {
    const regExTest = /d{6}[ -A]d{3}[0-9ABCDEFHJKLMNPRSTUVWXY]/;
    if (newSocialSecNum.match(regExTest)) {
      this._socialSecNum = newSocialSecNum;
    } else {
      this._socialSecNum = '123456-123A';
    }
  }
  printing() {
    console.log(this.firstName   ' '   this.lastName   ' is a person whos social security number is '   this.sosialSecNum);
  }
};

const dude = new Person('jack', 'jacker', '123456-123B');
dude.printing();


class Student extends Person {
  constructor(firstName, lastName, sosialSecNum, ECTS) {
    super(firstName, lastName, ECTS);
    this.ECTS = ECTS;
  }
  get ECTS() {
    return this._ECTS;
  }
  set ECTS(newECTS) {
    this._ECTS = newECTS;
  }
  printing() {
    console.log(this.firstName   ' '   this.lastName   ' is a Student whos social security number is '   this.socialSecNum   ' and who has '   this._ECTS   ' ECTS points.');
  }
}

const dudette = new Student('jill', 'jiller', '123456-123B', 5);
dudette.printing();
  

Ошибка, которую я получаю:

джек джекер — это человек, номер социального страхования которого 123456-123B c:Users … if (newSocialSecNum.match(regExTest)) { ^

Ошибка типа: newSocialSecNum.match не является функцией в Student.set sosialSecNum [как sosialSecNum] (c:…

Комментарии:

1. Опечатка: ECTS вместо sosialSecNum в super() вызове.

Ответ №1:

Вы передаете число 5 в качестве номера социального страхования в конструкторе. Числа не имеют match() функции в своем прототипе, поэтому вы получаете ошибку «не является функцией». Измените свой код, чтобы вместо этого передать строку номера социального страхования, и он будет работать.

   constructor(firstName, lastName, sosialSecNum, ECTS) {
    super(firstName, lastName, sosialSecNum);
    this.ECTS = ECTS;
  }