我有一个类似于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"这样的东西吗?
发布于 2016-09-03 07:28:10
原型对象的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"这是否比在原型上定义对象type属性更可取,而不是更改构造函数值,这是一个选择和意见问题。问题是,您认为这两个选项中哪一个更易于维护。
https://stackoverflow.com/questions/39300547
复制相似问题