如何获得函数名称?

时间:2018-10-03 14:44:11

标签: javascript function inheritance

如何获取函数名称?例如,我有一个函数:

function Bot(name, speed, x, y) {
    this.name = name;
    this.speed = speed;
    this.x = x;
    this.y = y;
}

并且我有一个返回有关Bot信息的方法:

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.
}

所以我有一个继承Bot函数的函数:

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.log(Zoom.showPosition());

Zoom.showPosition应该返回:

I am Racebot 'Lightning'. I am located at 0:1.

但是它返回I am Bot而不是I am Racebot

我该怎么做?

1 个答案:

答案 0 :(得分:3)

在showPosition()函数中将this.constructor.name替换为Bot.name时,它应该可以工作。

这是因为Bot.name将始终返回Bot()函数的名称,而this.constructor.name会在Racebot原型上查找设置为constructor属性的函数的名称实例(由于Racebot.prototype.constructor = Racebot)

而为“ Racebot”