-1

我正在 John Resig 的类继承实现(javascript)之上构建一个系统

除了为了检查/调试目的(也许是为了稍后的类型检查,我想处理实例化类的实际名称。

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

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

任何人?

4

1 回答 1

0

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

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

如果省略第二行,则构造函数名称将是父类的名称。name属性可能是只读的,但不是prototypeconstructor原型的属性也不是。这就是您可以设置“类” /构造函数的名称的方式。

另请注意,这__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

就这么简单,真的。

于 2013-03-02T13:54:12.287 回答