Как я могу получить имя функции? Например, у меня есть функция:
function Bot(name, speed, x, y) {
this.name = name;
this.speed = speed;
this.x = x;
this.y = y;
}
и у меня есть метод, который возвращает информацию о боте:
Bot.prototype.showPosition = function () {
return `I am ${Bot.name} ${this.name}. I am located at ${this.x}:${this.y}`; //I am Bot 'Betty'. I am located at -2:5.
}
Итак, у меня есть функция, которая наследует функцию бота:
function Racebot(name, speed, x, y) {
Bot.call(this, name, speed, x, y);
}
Racebot.prototype = Object.create(Bot.prototype);
Racebot.prototype.constructor = Racebot;
let Zoom = new Racebot('Lightning', 2, 0, 1);
console.info(Zoom.showPosition());
Zoom.showPosition должен вернуть:
I am Racebot 'Lightning'. I am located at 0:1.
Но он возвращает I am Bot, а не I am Racebot.
Как я могу это сделать?
замените $ {Bot.name} на $ {this.name} в методе showPosition
Ваша функция явно использует значение Bot.name, которое никогда не может быть ничем иным, кроме "Bot". Вместо этого вы можете использовать this.constructor.name.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Когда вы заменяете this.constructor.name на Bot.name в своей функции showPosition (), она должна работать.
Это связано с тем, что Bot.name всегда будет возвращать имя вашей функции Bot (), тогда как this.constructor.name ищет имя функции, заданной как свойство constructor, в прототипе вашего экземпляра Racebot (который является «Racebot» из-за Racebot.prototype.constructor = Racebot)
Есть ли причина, по которой вы не используете классы ES6?