我正在 John Resig 的类继承实现(javascript)之上构建一个系统
除了为了检查/调试目的(也许是为了稍后的类型检查,我想处理实例化类的实际名称。
例如:按照 John 的示例,返回Ninja
而不是Class
.
我知道这个名字来自,this.__proto__.constructor.name
但这个道具是只读的。我想它必须是子类本身初始化的一部分。
任何人?
我正在 John Resig 的类继承实现(javascript)之上构建一个系统
除了为了检查/调试目的(也许是为了稍后的类型检查,我想处理实例化类的实际名称。
例如:按照 John 的示例,返回Ninja
而不是Class
.
我知道这个名字来自,this.__proto__.constructor.name
但这个道具是只读的。我想它必须是子类本身初始化的一部分。
任何人?
如果您仔细查看代码,您会看到如下几行:
Foo.prototype = new ParentClass;//makes subclass
Foo.prototype.constructor = Foo;
如果省略第二行,则构造函数名称将是父类的名称。name属性可能是只读的,但不是prototype
,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
就这么简单,真的。