Snažím sa vytvoriť metódu get a set pre vlastnosť:
private _name: string;
Name() {
get:
{
return this._name;
}
set:
{
this._name = ???;
}
}
Aké'je kľúčové slovo na nastavenie hodnoty?
TypeScript používa syntax getter/setter, ktorá je podobná syntaxi jazyka ActionScript3.
class foo {
private _bar: boolean = false;
get bar(): boolean {
return this._bar;
}
set bar(value: boolean) {
this._bar = value;
}
}
To vytvorí tento JavaScript, ktorý používa funkciu ECMAScript 5 Object.defineProperty().
var foo = (function () {
function foo() {
this._bar = false;
}
Object.defineProperty(foo.prototype, "bar", {
get: function () {
return this._bar;
},
set: function (value) {
this._bar = value;
},
enumerable: true,
configurable: true
});
return foo;
})();
Aby ste ho mohli použiť,
var myFoo = new foo();
if(myFoo.bar) { // calls the getter
myFoo.bar = false; // calls the setter and passes false
}
Aby ste ho však vôbec mohli použiť, musíte sa uistiť, že kompilátor jazyka TypeScript je zameraný na ECMAScript5. Ak spúšťate kompilátor z príkazového riadka, použite príznak --target takto;
tsc --target ES5
Ak používate Visual Studio, musíte upraviť svoj projektový súbor a pridať príznak do konfigurácie nástroja na zostavovanie TypeScriptCompile. Môžete si to pozrieť tu:
Ako navrhuje @DanFromGermany nižšie, ak jednoducho čítate a zapisujete lokálnu vlastnosť ako foo.bar = true, potom je dvojica setter a getter zbytočná. Vždy ich môžete pridať neskôr, ak potrebujete niečo urobiť, napríklad logovanie, vždy keď sa vlastnosť číta alebo zapisuje.
Tu je pracovný príklad, ktorý by vás mal nasmerovať správnym smerom:
class Foo {
_name;
get Name() {
return this._name;
}
set Name(val) {
this._name = val;
}
}
Gettery a settery v jazyku JavaScript sú len bežné funkcie. Setter je funkcia, ktorá prijíma parameter, ktorého hodnota je nastavovaná hodnota.
Môžete napísať toto
class Human {
private firstName : string;
private lastName : string;
constructor (
public FirstName?:string,
public LastName?:string) {
}
get FirstName() : string {
console.log("Get FirstName : ", this.firstName);
return this.firstName;
}
set FirstName(value : string) {
console.log("Set FirstName : ", value);
this.firstName = value;
}
get LastName() : string {
console.log("Get LastName : ", this.lastName);
return this.lastName;
}
set LastName(value : string) {
console.log("Set LastName : ", value);
this.lastName = value;
}
}