是否可以在以下示例中获取派生的“类”的名称?我想以某种方式将输出设置为“ChildClass”,而不是它是“ParentClass”。
function ParentClass() { this.name = 'Bob' }
function ChildClass() { this.name = 'Fred' }
ChildClass.prototype = Object.create(ParentClass.prototype);
var child_instance = new ChildClass()
console.log('ChildClass type:', child_instance.constructor.name)
我意识到我可以在ChildClass构造函数中执行this.my_type = 'ChildClass'
,但是我有许多扩展ParentClass的类,并且在任何地方都这样做会很不方便。
答案 0 :(得分:5)
您的问题是,您正在覆盖prototype
的{{1}}属性,但您没有重置新原型上的ChildClass
属性。您需要添加一行:
constructor
现在您的代码将按预期工作。以下答案解释了原始代码无效的原因:https://stackoverflow.com/a/8096017/783743
我个人不喜欢用构造函数和原型分别编写这样的“类”。打字,语无伦次,眼睛疼痛,难以维持太单调乏味。因此,我使用以下实用程序函数来创建类:
function ParentClass() {
this.name = "Bob";
}
function ChildClass() {
this.name = "Fred";
}
ChildClass.prototype = Object.create(ParentClass.prototype);
ChildClass.prototype.constructor = ChildClass; // add this line to your code
现在您可以按如下方式创建类:
function defclass(base, body) {
var uber = base.prototype;
var prototype = Object.create(uber);
var constructor = (body.call(prototype, uber), prototype.constructor);
constructor.prototype = prototype;
return constructor;
}
这种方法有几个优点:
希望有所帮助。