在类/原型继承之后获取当前的“类名”

时间:2012-07-14 03:20:59

标签: javascript inheritance constructor

我正在玩类/函数/原型继承一​​点,并得到了一个不错的设置工作。我理解的简单。

http://jsfiddle.net/rudiedirkx/rwPeD/6/

出于调试目的,我想在每个构造函数中打印哪种对象正在调用该构造函数。例如,Ronin构造函数调用Ninja构造函数并调用Person构造函数。为此我做了一个get_class函数:

function get_class(obj) {
    var C = String(obj.__proto__.constructor);
    return C.match(/function (\w+)\(/, C)[1];
}

这不起作用。它总是返回“人”。为什么?每个'类'都有自己的构造函数,不是吗?如果我在每个构造函数中都执行console.log(this),Chrome Devtools会知道该对象的类型。我如何到达那里(使用香草JS)?

PS。我的Chrome中的完整输出:

Chrome Devtools output

2 个答案:

答案 0 :(得分:5)

或者你可以做一些真正有效的事情......

function getClass(obj) {
    return obj.__proto__.constructor.name;
}

obj.attr(“class”)仅在方法attr存在且不在本机环境中时才有效。

你的建议仍然非常好。

请注意,如果类不是本机类, proto .constructor.name将始终返回“Object”,例如Array,String,RegExp,Error等...如果有人知道的话如何说服“名称”属性返回真实姓名,即使我必须添加代码来执行此操作,我也会为他的麻烦给他买一个香蕉。

答案 1 :(得分:0)

我认为问题涉及以下行。 this.prototype.constructor指向Person.prototype指向的内容。

this.prototype = Object.create(sup.prototype);

您可能需要明确更改其引用。

this.prototype.constructor = this;

类似的问题可以在Get name of derived constructor in Javascript

找到