2013-01-21 16 views
5

accedere al valore di una supergetter in una classe derivata non sembra funzionare:Come posso accedere al valore della superclasse di un getter in una sottoclasse?

class Foo { 
    private _message:string = "Hello,"; 

    public get Message():string { 
     return this._message; 
    } 
} 

class Bar extends Foo { 
    public get Message():string { 
     return super.Message + " World"; 
    } 
} 

var snafu:Bar = new Bar(); 
document.write(snafu.Message); 

// Expected: "Hello, World" 
// Actual: "undefined World" 

Come posso correttamente ignorare un getter e fare uso del valore super?

+2

Questo è solo uno dei tanti "trucchi" nell'ereditarietà TypeScript. TS assomiglia molto a C# che ti fa pensare che funzioni anche come C#. Vedi http://blog.wouldbetheologian.com/2012/11/various-typescript-weirdnesses.html per molti altri :-(. –

+0

Buon blog. Grazie. – JcFx

risposta

6

Non sto necessariamente sostenendo che si continua con questo approccio, ma ...

class Bar extends Foo { 
    public get Message():string { 
     return Object.getOwnPropertyDescriptor(Foo.prototype, 'Message').get.apply(this) + ' World'; 
    } 
} 

ereditarietà prototipale non rende questo particolarmente semplice.

+0

Grazie. Ho un vincolo esterno sotto forma di un modello specifico (di stili di stampa a cascata) che usa pesantemente le proprietà sovrascritte - questo approccio almeno mi consente di lavorare con esso in TS. – JcFx

Problemi correlati