gpt4 book ai didi

javascript - 在 Javascript 中获取派生构造函数的名称

转载 作者:行者123 更新时间:2023-11-29 17:11:44 25 4
gpt4 key购买 nike

是否可以在下面的例子中获取派生“类”的名称?我想以某种方式让输出成为“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 的类,在任何地方都这样做会很不方便。

最佳答案

你的问题是你覆盖了 ChildClassprototype 属性,但你没有重置 constructor 属性新的原型(prototype)。您需要添加一行:

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

现在您的代码将按预期工作。以下答案解释了为什么您的原始代码不起作用:https://stackoverflow.com/a/8096017/783743

我个人不喜欢编写这样的“类”,构造函数和原型(prototype)分别悬空。只是打字太乏味,语无伦次,眼睛疼痛且难以维护。因此,我使用以下实用函数来创建类:

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;
}

现在你可以创建类如下:

var ParentClass = defclass(Object, function () {
this.constructor = function () {
this.name = "Bob";
};
});

var ChildClass = defclass(ParentClass, function () {
this.constructor = function () {
this.name = "Fred";
};
});

这种方法有几个优点:

  1. 继承和类定义已合二为一。
  2. 构造函数只是另一种原型(prototype)方法。
  3. 一切都很好地封装在一个闭包中。
  4. 调用基类原型(prototype)方法很容易。
  5. 您可以轻松创建私有(private)静态函数。

希望对您有所帮助。

关于javascript - 在 Javascript 中获取派生构造函数的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20865249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com