我正在John Resig的class inheritance implementation(javascript)
之上建立一个系统一切正常,除了为了检查/调试目的(也许稍后用于类型检查,我想要处理实例化类的实际名称。
例如:按照John的示例,返回Ninja
而不是Class
。
我知道这个名字来自this.__proto__.constructor.name
,但这个道具只读。我想它必须是子类本身初始化的一部分。
任何?
答案 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
就这么简单,真的。