2016-09-02 11 views
8

私にはStarship -> Capital -> Omegaのような継承チェーンがあり、Omegaクラスのオブジェクトから "Omega"を取得できるようにしたいと考えています。Javascriptクラスの継承とすべての継承の名前?

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 

オメガは、すなわち「オメガ」の一部であるか、または私はちょうどオメガ機能にthis.type = "Omega"のようなものを追加する必要があることを最年少クラスを取得する方法はありますか?

+0

すべての継承ライブラリはコンストラクタプロパティを「修正」する必要があります –

答えて

2

プロトタイプオブジェクトのconstructorプロパティが書き込み可能です。クイックテストでは、その値を変更しても、プロパティの列挙できない性質は変わりません。で、これはプロトタイプにオブジェクトにtypeプロパティを定義し、代わりのコンストラクタ値を変更するに好適であるかどうか

// ... 

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" 

だから、使用最年少 コンストラクタを表示するために、プロトタイプオブジェクトのコンストラクタのプロパティを変更することができます選択と意見の問題。問題は、2つの選択肢のどちらがより保守性が高いと思いますか。