2016-09-02 14 views
8

Posiadam łańcuch dziedziczenia, który wygląda jak Starship -> Capital -> Omega i chciałbym móc odzyskać "Omegę" z obiektu klasy Omega.Dziedziczenie klasy JavaScript i nazwa wszystkich spadków?

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 

Czy istnieje sposób, aby odzyskać najmłodsze klasy, która jest częścią omega, czyli „omega” lub należy po prostu dodać coś takiego this.type = "Omega" do funkcji Omega?

+0

Wszystkie biblioteki dziedziczenia muszą "naprawić" właściwość konstruktora –

Odpowiedz

2

Właściwość obiektu prototypowego jest zapisywalna. Szybki test pokazuje, że zmiana jego wartości nie zmienia nieprzeliczalnego charakteru własności.

Więc można zmienić właściwości konstruktora OBIEKTÓW prototyp, aby pokazać najmłodszym konstruktora używany:

// ... 

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" 

czy to jest lepsze zdefiniowanie obiektowi type nieruchomość na prototypie, zamiast zmieniania wartości konstruktora, jest kwestia wyboru i opinia. Pytanie brzmi, która z tych dwóch opcji może być łatwiejsza do utrzymania.