Wie kann ich die nutzen und anwenden JavaScript Dekoratoren?
Ich versuche zu verstehen, wie Dekorateure in ein sehr einfaches Stück des Codes, so kann ich diese Sichtweise auf mein größeres Projekt. Nehmen cue von Addy Osmani ist Artikel hier, habe ich eine einfache Stück code wie unten.
Sagen, ich habe eine Klasse namens Cat
mit meow()
Methode, ich möchte, um es zu schmücken, mit einigen Protokollierung, wie unten.
class Cat {
@logger
meow() { console.log( ' Meeeoow! ') }
};
function logger(target, key, descriptor) {
console.log("Cat snarling...");
return descriptor;
}
const cat = new Cat();
cat.meow();
Wenn ich versuche, führen Sie diese gegen die Node.js -interpreter (version 9.1.0), bekomme ich die folgende Fehlermeldung.
/Users/ravindranath/Projekte/Dekorateure/index.js:2 @logger ^ SyntaxError: Ungültiges oder unerwartetes token bei createScript (vm.js:80:10) am Objekt.runInThisContext (vm.js:152:10) at-Modul._compile (Modul.js:605:28) bei Object.Module._extensions..js (Modul.js:652:10) at-Modul.load (module.js:560:32) bei tryModuleLoad (Modul.js:503:12) an der Funktion.- Modul._load (module.js:495:3) an der Funktion.- Modul.runMain (Modul.js:682:10) beim Start (bootstrap_node.js:191:16) bei bootstrap_node.js:613:3
So, meine Fragen sind:
-
Tut Node.js 9.x-support-decorator-syntax? Oder kommt es in einer zukünftigen version?
-
Sehe ich einige
express-js
basiert Dekorateure auf GitHub, aber ich bin nicht in der Lage, um herauszufinden, wie erstelle ich meine eigenen Dekorateur. Kann jemand ein einfaches basic-Beispiel für das erstellen eines benutzerdefinierten Dekorateur mit Node.js?
- hier können Sie - Knoten.grün
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dekorateure sind nicht Teil von ECMAScript-2016 (aka 7). Dekoratoren sind derzeit in Stufe 2-Entwurf von insgesamt 4 Phasen einer Funktion geht durch, bevor Sie Finalisiert und zu einem Teil der Sprache. Wahrscheinlich werden Sie werden integriert in die Sprache, in der nahen Zukunft, aber seine Funktionen und Besonderheiten sind FREIBLEIBEND. Weil dieser, müssen Sie einen transpiler wie Babel zu verwandeln, die Dekorateure in den code der Knoten runtime verstehen kann (ECMAScript 2016) durch die Installation der
transform-Dekoratoren
Babel-plugin.Als für Dekoratoren, die Sie bereits getan haben. Jeder decorator ist nur eine Funktion, umschließt eine weitere, die mit Argumenten, basierend auf dem Anwendungsfall, in Ihrem Fall
target
,key
, unddescriptor
. Ihrelogger
Funktion:Ist schon ein Dekorateur. Für die Klasse Eigenschaften und Methoden,
target
bezieht sich auf die Klasse der Eigenschaft,key
ist der name der Eigenschaft, unddescriptor
ist der Deskriptor der Immobilie. Der Dekorator wird dann aufgerufen und die Eigenschaft der Klasse definiert ist, über- Objekt.defineProperty
einmal desugared. Dein Beispiel kann verkuerzt werden, um diese:Für die Klassen selbst, Dekorateure nehmen Sie ein argument,
target
beschreibt die dekorierte Klasse. Ich schlage vor, Lesen einige Dokumentation auf das Thema, um sich mit Ihr vertraut zu werden.