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

use*_*806 8 javascript inheritance

我有一个类似的继承链,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
Run Code Online (Sandbox Code Playgroud)

有没有办法检索omega所属的最年轻的类,即"Omega"或者我应该添加类似于this.type = "Omega"Omega函数的东西?

tra*_*r53 2

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

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

    // ...

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"
Run Code Online (Sandbox Code Playgroud)

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