Классы JS, переопределение toString

Рейтинг: 0Ответов: 2Опубликовано: 01.05.2023

Создать класс Programmer, инстанс которого обладает полями name, stack (массив строк, типа ["Python", "PHP", "Java"]), и методом code() (который перебирает массив stack и выводит сообщения вида "Oleg is coding on Python", "Oleg is coding on PHP", "Oleg is coding on Java"). Метод code() должен храниться в прототипе класса. Переопределить метод toString() у инстансов Programmer, чтобы они выводили сообщение вида "Hello my name is Oleg".

У меня ошибка что toString() undefined. И я не понимаю, как объявить stack массив ["Python", "PHP", "Java"], чтобы он его перебрал и выводил строку на каждый stack.

class Programmer {
    constructor(userName, stack){
    this.userName = userName;
    this.stack = stack;
    Programmer.prototype.code = function () {
        console.log(`${this.userName} is coding on ${this.stack}`);
    };
}}

const pr =new Programmer('Oleg', ['Python', 'PHP', 'Java']);
pr.code();

pr.prototype.toString = function prToString() {
    return `Hello my name is ${this.userName} `;
}

"Oleg is coding on Python,PHP,Java" - вот как у меня выдает, всё вместе.

Ответы

▲ 0Принят

Надо поменять pr.prototype на Object.getPrototypeOf(pr)

Object.getPrototypeOf(pr).toString = function prToString() {
    return `Hello my name is ${this.userName} `;
}

У меня ошибка что toString udefined. И я не понимаю, как объявить stack массив [«Python», «PHP», «Java»], чтобы он его перебрал и выводил строку на каждый stack

Programmer.prototype.code = function() {
    this.stack.map(e => console.log(`${this.userName} is coding on ${e}`))
}
▲ 1

Я бы просто создал класс с полями name и stack и методами code и toString:

class Programmer {
  name = null;
  stack = null;
  
  constructor(name, stack) {
    this.name = name;
    this.stack = stack;
  }
  
  code() {
    for(const programmingLanguage of this.stack) {
      console.log(`${this.name} is coding on ${programmingLanguage}`);
    }
  }
  
  toString() {
    console.log(`Hello my name is ${this.name}`);
  }
}

const programmer = new Programmer('Oleg', ['JavaScript', 'Java', 'PHP']);

programmer.code();
programmer.toString();
'' + programmer; // Вызывает метод toString автоматически

console.log(Object.getPrototypeOf(programmer).code);
console.log(Object.getPrototypeOf(programmer).toString);