| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Functions/get | [Back] [Original] |
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.
Diese Funktion ist gut etabliert und funktioniert auf vielen Gerten und in vielen Browserversionen. Sie ist seit Juli 2015 browserbergreifend verfgbar.
Die get Syntax bindet eine Objekt-Eigenschaft an eine Funktion, die aufgerufen wird, wenn diese Eigenschaft abgefragt wird. Sie kann auch in Klassen verwendet werden.
const obj = {
log: ["a", "b", "c"],
get latest() {
return this.log[this.log.length - 1];
},
};
console.log(obj.latest);
// Expected output: "c"
{ get prop() { /* */ } }
{ get [expression]() { /* */ } }
Es gibt einige zustzliche Syntaxeinschrnkungen:
propDer Name der Eigenschaft, die an die gegebene Funktion gebunden werden soll. Auf dieselbe Weise wie andere Eigenschaften in Objektinitialisierungen kann es sich um einen String-Literal, einen Zahlen-Literal oder einen Bezeichner handeln.
expressionSie knnen auch Ausdrcke fr einen berechneten Eigenschaftsnamen verwenden, um diese an die gegebene Funktion zu binden.
Manchmal ist es wnschenswert, Zugriff auf eine Eigenschaft zu erlauben, die einen dynamisch berechneten Wert zurckgibt. Oder Sie mchten den Status einer internen Variablen widerspiegeln, ohne explizite Methodenaufrufe zu verwenden. In JavaScript kann dies mit Hilfe eines Getters erreicht werden.
Eine Objekteigenschaft ist entweder eine Dateneigenschaft oder eine Zugriffseigenschaft, aber sie kann nicht gleichzeitig beides sein. Lesen Sie Object.defineProperty() fr weitere Informationen. Die Getter-Syntax erlaubt es Ihnen, die Getter-Funktion in einer Objektinitialisierung anzugeben.
const obj = {
get prop() {
// getter, the code executed when reading obj.prop
return someValue;
},
};
Eigenschaften, die mit dieser Syntax definiert wurden, sind eigene Eigenschaften des erstellten Objekts und sie sind konfigurierbar und aufzhlbar.
Dies wird eine Pseudo-Eigenschaft latest fr das Objekt obj erstellen, die den letzten Array-Element in log zurckgibt.
const obj = {
log: ["example", "test"],
get latest() {
return this.log.at(-1);
},
};
console.log(obj.latest); // "test"
Beachten Sie, dass der Versuch, latest einen Wert zuzuweisen, diesen nicht ndern wird.
Sie knnen genau dieselbe Syntax verwenden, um ffentliche Instanz-Getter zu definieren, die in Klasseninstanzen verfgbar sind. In Klassen bentigen Sie kein Komma als Trennzeichen zwischen den Methoden.
class ClassWithGetSet {
#msg = "hello world";
get msg() {
return this.#msg;
}
set msg(x) {
this.#msg = `hello ${x}`;
}
}
const instance = new ClassWithGetSet();
console.log(instance.msg); // "hello world"
instance.msg = "cake";
console.log(instance.msg); // "hello cake"
Getter-Eigenschaften werden auf der Eigenschaft prototype der Klasse definiert und sind daher von allen Instanzen der Klasse geteilt. Im Gegensatz zu Getter-Eigenschaften in Objektliteralen sind Getter-Eigenschaften in Klassen nicht aufzhlbar.
Statische Getter und private Getter verwenden hnliche Syntaxen, die auf den Seiten static und private Elemente beschrieben sind.
delete OperatorWenn Sie den Getter entfernen mchten, knnen Sie ihn einfach mit delete lschen:
delete obj.latest;
definePropertyUm jederzeit einen Getter zu einem vorhandenen Objekt hinzuzufgen, verwenden Sie Object.defineProperty().
const o = { a: 0 };
Object.defineProperty(o, "b", {
get() {
return this.a + 1;
},
});
console.log(o.b); // Runs the getter, which yields a + 1 (which is 1)
const expr = "foo";
const obj = {
get [expr]() {
return "bar";
},
};
console.log(obj.foo); // "bar"
class MyConstants {
static get foo() {
return "foo";
}
}
console.log(MyConstants.foo); // 'foo'
MyConstants.foo = "bar";
console.log(MyConstants.foo); // 'foo', a static getter's value cannot be changed
Getter geben Ihnen eine Mglichkeit, eine Eigenschaft eines Objekts zu definieren, aber sie berechnen den Wert der Eigenschaft nicht, bis darauf zugegriffen wird. Ein Getter schiebt die Kosten der Berechnung des Wertes auf, bis der Wert bentigt wird. Falls er nie bentigt wird, zahlen Sie niemals die Kosten.
Eine zustzliche Optimierungstechnik, um die Berechnung eines Eigenschaftswertes zu verzgern oder herauszuschieben und ihn fr spteren Zugriff zu cachen, sind intelligente (oder memoisierte) Getter. Der Wert wird das erste Mal berechnet, wenn der Getter aufgerufen wird, und wird dann im Cache gespeichert, sodass nachfolgende Zugriffe den zwischengespeicherten Wert zurckgeben, ohne ihn erneut zu berechnen. Dies ist in folgenden Situationen ntzlich:
Hinweis: Dies bedeutet, dass Sie keinen Lazy Getter fr eine Eigenschaft schreiben sollten, deren Wert Sie erwarten, sich zu ndern, denn wenn der Getter "lazy" ist, wird er den Wert nicht neu berechnen.
Beachten Sie, dass Getter von Natur aus nicht "lazy" oder "memoisiert" sind; Sie mssen diese Technik implementieren, wenn Sie dieses Verhalten wnschen.
Im folgenden Beispiel hat das Objekt als eigene Eigenschaft einen Getter. Beim Abfragen der Eigenschaft wird die Eigenschaft vom Objekt entfernt und erneut hinzugefgt, jedoch diesmal implizit als Dateneigenschaft. Schlielich wird der Wert zurckgegeben.
const obj = {
get notifier() {
delete this.notifier;
this.notifier = document.getElementById("bookmarked-notification-anchor");
return this.notifier;
},
};
Viele Funktionen akzeptieren ein Objekt und holen einzelne Eigenschaften daraus als separate Parameter (dieses Objektparameter ist als Optionsobjekt bekannt). Sie knnen erkennen, ob eine bestimmte Option untersttzt wird, indem Sie einen Getter verwenden, um zu verfolgen, ob auf die Eigenschaft zugegriffen wurde. Dieses Beispiel prft, ob die Option colorType von der Methode HTMLCanvasElement.getContext() untersttzt wird.
function isColorTypeSupported() {
let supported = false;
const obj = {
get colorType() {
supported = true;
return undefined;
},
};
document.createElement("canvas").getContext("2d", obj);
return supported;
}
Whrend die Verwendung des get Schlsselworts und Object.defineProperty() hnliche Ergebnisse haben, gibt es einen feinen Unterschied zwischen den beiden, wenn sie auf Klassen angewandt werden. Die get Syntax definiert die Eigenschaft auf dem Prototyp der Instanz, whrend Object.defineProperty() die Eigenschaft auf der Instanz definiert, auf die es angewendet wird.
class Example {
get hello() {
return "world";
}
}
const obj = new Example();
console.log(obj.hello);
// "world"
console.log(Object.getOwnPropertyDescriptor(obj, "hello"));
// undefined
console.log(
Object.getOwnPropertyDescriptor(Object.getPrototypeOf(obj), "hello"),
);
// { configurable: true, enumerable: false, get: function get hello() { return 'world'; }, set: undefined }
| Spezifikation |
|---|
| ECMAScript 2027 LanguageSpecification # sec-method-definitions |
setObject.defineProperty()classDer Bauplan fr ein besseres Internet.
Teile dieses Inhalts sind 19982026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfgbar unter einer Creative-Commons-Lizenz.
| Web Proxy Viewer | New URL | Original Page |