Ich versuche, eine get- und set-Methode für eine Eigenschaft zu erstellen:
private _name: string;
Name() {
get:
{
return this._name;
}
set:
{
this._name = ???;
}
}
Wie lautet das Schlüsselwort zum Festlegen eines Werts?
typescript
MuriloKunze
quelle
quelle
typescript private name: string; getName() { get: { return this.name; } set: { this.name = ???; } }
Antworten:
TypeScript verwendet eine Getter / Setter-Syntax, die ActionScript3 ähnelt.
Dadurch wird dieses JavaScript mithilfe der ECMAScript 5-
Object.defineProperty()
Funktion erstellt.Also, um es zu benutzen,
Um es überhaupt verwenden zu können, müssen Sie jedoch sicherstellen, dass der TypeScript-Compiler auf ECMAScript5 abzielt. Wenn Sie den Befehlszeilen-Compiler ausführen, verwenden Sie das folgende
--target
Flag.Wenn Sie Visual Studio verwenden, müssen Sie Ihre Projektdatei bearbeiten, um der Konfiguration für das TypeScriptCompile-Build-Tool das Flag hinzuzufügen. Das können Sie hier sehen :
Wie @DanFromGermany unten vorschlägt,
foo.bar = true
ist es übertrieben, ein Setter-Getter-Paar zu haben , wenn Sie einfach eine lokale Eigenschaft wie lesen und schreiben . Sie können sie später jederzeit hinzufügen, wenn Sie etwas tun müssen, z. B. Protokollierung, wenn die Eigenschaft gelesen oder geschrieben wird.quelle
myFoo.bar = true
anstelle vonmyFoo.bar(true);
odermyFoo.setBar(true);
?Ezward hat bereits eine gute Antwort gegeben, aber ich habe festgestellt, dass in einem der Kommentare gefragt wird, wie es verwendet wird. Für Leute wie mich, die über diese Frage stolpern, hielt ich es für nützlich, einen Link zur offiziellen Dokumentation über Getter und Setter auf der Typescript-Website zu haben, da dies dies gut erklärt und hoffentlich immer auf dem neuesten Stand bleibt, wenn Änderungen vorgenommen werden gemacht und zeigt Beispielverwendung:
http://www.typescriptlang.org/docs/handbook/classes.html
Beachten Sie insbesondere für diejenigen, die nicht damit vertraut sind, dass Sie das Wort "get" nicht in einen Aufruf an einen Getter einbinden (und ähnlich für Setter):
Sie sollten dies einfach tun:
gegeben eine Klasse wie:
dann wird der 'bar'-Getter für die private' _bar'-Eigenschaft aufgerufen.
quelle
Hier ist ein Arbeitsbeispiel, das Sie in die richtige Richtung weisen sollte:
Getter und Setter in JavaScript sind nur normale Funktionen. Der Setter ist eine Funktion, die einen Parameter verwendet, dessen Wert der eingestellte Wert ist.
quelle
static
.Foo._name
sollte ersetzt werden durchthis._name
Du kannst das schreiben
quelle
public
Hier werden doppelte Mitglieder definiert.TS bietet Getter und Setter, mit denen Objekteigenschaften mehr Kontrolle darüber haben, wie auf sie außerhalb des Objekts zugegriffen (Getter) oder sie aktualisiert (Setter) werden. Anstatt direkt auf die Eigenschaft zuzugreifen oder diese zu aktualisieren, wird eine Proxy-Funktion aufgerufen.
Beispiel:
quelle
Es ist dem Erstellen gängiger Methoden sehr ähnlich. Setzen Sie einfach das Schlüsselwort reserviert
get
oderset
am Anfang.In diesem Fall können Sie die Rückgabe eingeben
get getMethod1() {
quelle
Ich denke, ich verstehe wahrscheinlich, warum es so verwirrend ist. In Ihrem Beispiel wollten wir Getter und Setter für
_name
. Dies erreichen wir jedoch, indem wir Getter und Setter für eine nicht verwandte Klassenvariable erstellenName
.Bedenken Sie:
Der obige Code bewirkt Folgendes:
get
undset
erstelle Getter und Setter füryourCarTiresCount
( nicht fürtiresCount
).Der Getter ist:
und der Setter ist:
Das heißt, jedes Mal, wenn wir es tun
new Car().yourCarTiresCount
, läuft Getter. Und für jedennew Car().yourCarTiresCount('7')
Setter läuft.tireCount
.quelle
Wenn Sie nach einer Möglichkeit suchen, get und set für ein Objekt (keine Klasse) zu verwenden,
Proxy
kann dies hilfreich sein: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ProxyHinweis: Beachten Sie, dass dies eine neue API ist, die nicht unterstützt wird und für ältere Browser erforderlich ist
quelle
Wenn Sie mit TypeScript-Modulen arbeiten und versuchen, einen exportierten Getter hinzuzufügen, können Sie Folgendes tun:
Dann haben Sie in einer anderen Datei:
quelle
this
muss im obersten Bereich eines Moduls undefiniert sein. Sie könntenexports
stattdessen verwenden, aber Sie sollten es überhaupt nicht tun, da es praktisch garantiert Kompatibilitätsprobleme verursacht