Как я могу получить имя функции?

Как я могу получить имя функции? Например, у меня есть функция:

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.

Как я могу это сделать?

Есть ли причина, по которой вы не используете классы ES6?

Seblor 03.10.2018 16:47

замените $ {Bot.name} на $ {this.name} в методе showPosition

Stakvino 03.10.2018 16:48

Ваша функция явно использует значение Bot.name, которое никогда не может быть ничем иным, кроме "Bot". Вместо этого вы можете использовать this.constructor.name.

Pointy 03.10.2018 16:48
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
3
57
1

Ответы 1

Когда вы заменяете this.constructor.name на Bot.name в своей функции showPosition (), она должна работать.

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

Другие вопросы по теме