我有一个类似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"
之类的东西吗?
答案 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
属性,而不是更改构造函数值,这是一个选择和意见的问题。问题是您认为哪两个选项更易于维护。