javascript - Hur kan jag komma åt superklassens värde på en getter i en subklass?


Att komma åt super-värdet av en getter i en härledd klass verkar inte fungera:

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"

Hur kan jag korrekt skriva över en getter och använda super-värdet?

Svar #1

Jag förespråkar inte nödvändigtvis att du fortsätter med detta tillvägagångssätt, men...

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

Prototypbaserad arv gör inte detta särskilt enkelt.

Relaterade artiklar