Классы JS, переопределение toString
Создать класс 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" - вот как у меня выдает, всё вместе.
Ответы (2 шт):
Надо поменять 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}`))
}
Я бы просто создал класс с полями 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);