【问题标题】:Javascript class inheritance and name of all inheritances?Javascript类继承和所有继承的名称?
【发布时间】:2016-09-02 20:51:27
【问题描述】:

我有一个类似于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" 的内容?

【问题讨论】:

  • 所有继承库都必须“修复”构造函数属性

标签: javascript inheritance


【解决方案1】:

原型对象的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 属性更可取,而不是更改构造函数值,这是一个选择和意见的问题。问题是您认为这两个选项中哪一个更易于维护。

【讨论】:

    猜你喜欢
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    • 2014-02-25
    • 2010-11-26
    • 1970-01-01
    相关资源
    最近更新 更多