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

时间:2016-09-02 20:51:28

标签: 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

有没有办法找回omega所属的最年轻的班级,即" Omega"或者我应该在Omega函数中添加this.type = "Omega"之类的东西吗?

1 个答案:

答案 0 :(得分: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"

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