使用John Resig的JavaScript类继承实现时,打印子类名称而不是“Class”

时间:2013-03-02 13:35:56

标签: javascript inheritance

我正在John Resig的class inheritance implementation(javascript)

之上建立一个系统

一切正常,除了为了检查/调试目的(也许稍后用于类型检查,我想要处理实例化类的实际名称。

例如:按照John的示例,返回Ninja而不是Class

我知道这个名字来自this.__proto__.constructor.name,但这个道具只读。我想它必须是子类本身初始化的一部分。

任何?

1 个答案:

答案 0 :(得分:0)

如果仔细查看代码,您会看到如下几行:

Foo.prototype = new ParentClass;//makes subclass
Foo.prototype.constructor = Foo;

如果要省略第二行,则构造函数名称将是父类的名称。 name 属性可能是只读的,但prototype不是,原型的constructor属性也不是。这就是你如何设置“class” / constructor的名称。

另请注意,__proto__不是获取对象原型的方法。最好使用此代码段:

var protoOf = Object && Object.getPrototypeOf ? Object.getPrototypeOf(obj) : obj.prototype;
//obviously followed by:
console.log(protoOf.constructor.name);
//or:
protoOf.addProtoMethod = function(){};//it's an object, thus protoOf references it
//or if all you're after is the constructor name of an instance:
console.log(someInstance.constructor.name);//will check prototype automatically

就这么简单,真的。