gpt4 book ai didi

Javascript类继承和所有继承的名称?

转载 作者:数据小太阳 更新时间:2023-10-29 04:19:08 25 4
gpt4 key购买 nike

我有一个类似 Starship -> Capital -> Omega 的继承链,我希望能够从 Omega 类的对象中检索“Omega”。

function Starship(){
}


function Capital(){
Starship.call(this);
}
Capital.prototype = Object.create(Starship.prototype);


function Omega(){
Capital.call(this);
}
Omega.prototype = Object.create(Capital.prototype);

var omega = new Omega();


omega instanceof Omega // true
omega instanceof Capital// true
omega instanceof Starship // true
omega.constructor.name // Starship

有没有办法检索 omega 所属的最年轻的类,即“Omega”,或者我应该向 Omega 函数添​​加类似 this.type = "Omega" 的内容?

最佳答案

原型(prototype)对象的constructor 属性是可写的。快速测试表明更改其值不会更改属性的不可枚举性质。

因此您可以更改原型(prototype)对象的构造函数属性以显示最年轻的对象使用的构造函数:

    // ...

Capital.prototype = Object.create(Starship.prototype);
Capital.prototype.constructor = Capital;

// ...

Omega.prototype = Object.create(Capital.prototype);
Omega.prototype.constructor = Omega;

// ...

new Omega().constructor.name; // is now "Omega"

这是否优于在原型(prototype)上定义对象 type 属性,而不是更改构造函数值,这是一个选择和意见的问题。问题是您认为这两个选项中的哪一个更易于维护。

关于Javascript类继承和所有继承的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39300547/

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