Javascript 获取最新信息';类名';类/原型继承之后
我玩了一点类/函数/原型继承,得到了一个不错的设置。一些我能理解的简单的事情 出于调试目的,我想在每个构造函数中打印调用该构造函数的对象的类型。例如,Ronin构造函数调用Ninja构造函数,Ninja构造函数调用Person构造函数。为此,我制作了一个Javascript 获取最新信息';类名';类/原型继承之后,javascript,inheritance,constructor,Javascript,Inheritance,Constructor,我玩了一点类/函数/原型继承,得到了一个不错的设置。一些我能理解的简单的事情 出于调试目的,我想在每个构造函数中打印调用该构造函数的对象的类型。例如,Ronin构造函数调用Ninja构造函数,Ninja构造函数调用Person构造函数。为此,我制作了一个get_class函数: function get_class(obj) { var C = String(obj.__proto__.constructor); return C.match(/function (\w+)\(
get_class
函数:
function get_class(obj) {
var C = String(obj.__proto__.constructor);
return C.match(/function (\w+)\(/, C)[1];
}
这是行不通的。它总是返回“Person”。为什么?每个“类”都有自己的构造函数,不是吗?如果我在每个构造函数中执行console.log(this)
,Chrome Devtools就会知道对象是哪种类型。我怎么去那里(香草JS)
PS.我的Chrome中的完整输出:
或者你可以做一些真正有效的事情
function getClass(obj) {
return obj.__proto__.constructor.name;
}
attr(“类”)仅在方法attr存在时有效,而在本机环境中则不会
不过你的建议在设计上还是很好的
请注意,如果类不是本机类,例如数组、字符串、RegExp、Error等,proto.constructor.name将始终返回“Object”。。。如果有人知道如何说服“name”属性返回真实姓名,即使我必须添加代码,我也会为他/她买一根香蕉,因为他/她的麻烦。我认为问题在于下面这句话。this.prototype.constructor指向Person.prototype指向的对象
this.prototype = Object.create(sup.prototype);
您可能需要显式更改其引用
this.prototype.constructor = this;
类似的问题可以在中找到,如果
obj.\uuuu proto\uuuu.constructor
总是返回Person
构造函数,那么obj.\uuu proto\uuuuu.constructor.name
总是返回“Person”。。。这和我试过的方法完全一样,但事实并非如此。如果它对您有效,您能否在中实施它?感谢动态加载脚本(例如使用require.js)时Doesn不起作用错误消息:this.\uuuu proto\uuuu.constructor.name不是一个函数。要使此答案更“正确”,可以用对象.getPrototypeOf(obj)
替换obj.\uu proto\uuu
。请注意:当您的代码为生产而缩小时,基于此的逻辑可能会中断。在开发过程中,当值为“MyClassName”时,可以在缩小时将其简单地截断为“e”。的可能重复项