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

Rud*_*die 7 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];
}
Run Code Online (Sandbox Code Playgroud)

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

PS.Chrome中的完整输出:

Chrome Devtools输出

小智 5

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

function getClass(obj) {
    return obj.__proto__.constructor.name;
}
Run Code Online (Sandbox Code Playgroud)

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

你的建议仍然非常好.

请注意,如果类不是本机类,例如Array,String,RegExp,Error等,proto .constructor.name将始终返回"Object"...如果有人知道如何说服"name"属性返回真正的名字,即使我必须添加代码来做它,我会为他/她的麻烦给他买一个香蕉.

  • 注意:当您的代码被缩小以用于生产时,基于此的逻辑可能会中断。当开发过程中该值为“MyClassName”时,在缩小时可以将其简单地截断为“e”。 (2认同)