diesen Code vor:private Mitglieder zugänglich sind in Winkeln 2 Dekorateure
export class Hero {
constructor(private id: number, private name: string) {}
}
@Component({
selector: 'my-app',
template: '<h1>{{title}}</h1><h2>{{hero.name}} details!</h2>'
})
export class AppComponent {
private title = "Tour of Heroes";
private hero: Hero = new Hero(1, "Windstorm");
}
In AppComponent
‚s Vorlage Ich schrieb hero.name
jedoch dieses Feld nach der Hero
Klasse ist privat und nicht zugänglich sein. Wie dieser Code kompiliert und funktioniert? Fehle ich etwas?
EDIT: Lesen Sie die Antworten auf, warum es passiert, hier ist meine Art und Weise der Umgang mit diesem, es ist kein fix, aber es hält die Dinge besser organisiert und sicher neben Accessoren sind immer gut zu nutzen:
export class Hero {
constructor(private _id: number, private _name: string) { }
get name(): string {
return this._name;
}
get id(): number {
return this._id;
}
}
@Component({
selector: 'my-app',
template: '<h1>{{title}}</h1><h2>{{hero.name}} details!</h2>'
})
export class AppComponent {
private title = "Tour of Heroes";
private hero: Hero = new Hero(1, "Windstorm");
}
Wenn hero.name
in JS ausgeführt wird, sollte es die JS-kompilierte Getterfunktion aufrufen, die Sie in Ihrem TS-Code definiert haben, dies sollte eine Art Kontrolle über die Eigenschaften geben, während TS-Codestil beibehalten wird.
Vielleicht versuchen 'exportieren Klasse Hero {private name: string}' (dh nicht als ein Argument für den Konstruktor) –
Es kompiliert noch, ich glaube, es hat etwas mit TypScript-Transpiler als JS hat keine privaten Mitglieder ursprünglich , macht das Sinn? – Israelg99