Decorator fabrikaları
- TypeScript kursu
- Orta seviye
- Ders 47/89
- 4 dk
Parametreli decorator'ları öğrenirsin.
Decorator fabrikaları
Decorator fabrikası, decorator döndüren bir fonksiyondur. Parametre alarak decorator'u özelleştirmeni sağlar: @Etiketli("demo") class Foo {}. Burada Etiketli("demo") önce çağrılır, dönen decorator fonksiyonu sonra sınıfa uygulanır. Böylece aynı decorator'u farklı parametrelerle yeniden kullanabilirsin.
function Etiketli(etiket: string) {
return function(ctor: any): any {
console.log(etiket);
return ctor;
};
}
@Etiketli("demo")
class Foo {}İki adımlı çağrı
Fabrika kullanımı iki adımlıdır: önce fabrika parametrelerle çağrılır ve bir decorator döner; sonra bu decorator hedefe uygulanır. Etiketli("demo")(Foo) yazımı, Etiketli("demo")'nun döndürdüğü decorator'un Foo'ya uygulanmasıdır. Bu, @Etiketli("demo") class Foo {} yazımının eşdeğeridir.
Uygulama Etiketli fabrika yaz
Etiketli fabrikası yaz: (etiket: string) alsın ve (ctor: any): any imzalı bir decorator fonksiyonu döndürsün. Döndürülen decorator, console.log("etiket: " + etiket) yazdırsın ve ctor'yu döndürsün. Foo sınıfı yaz; selam metodu "merhaba" döndürsün. Fabrikayı "demo" etiketiyle çağırıp dönen decorator'u Foo sınıfına iki adımlı uygula ve sonucu DecoratedFoo'ya ata. Elde edilen sınıfın yeni örneğinden selam metodunu çağır ve sonucu yazdır.
Başlangıç kodu
// Etiketli fabrikasını yaz: etiket: string alır
// (ctor: any): any imzalı bir decorator döndürsün
// Decorator "etiket: " + etiket yazdırsın, ctor döndürsün
// Foo sınıfı yaz, selam metodu "merhaba" döndürsün
// Fabrikayı "demo" etiketiyle çağır, dönen decorator'u Foo'ya uygula
// DecoratedFoo'ya ata
// yeni örnek üzerinden selam metodunu çağır, sonucu yazdırÖrnek çözüm
function Etiketli(etiket: string): (ctor: any) => any {
return function(ctor: any): any {
console.log("etiket: " + etiket);
return ctor;
};
}
class Foo {
selam(): string {
return "merhaba";
}
}
const DecoratedFoo = Etiketli("demo")(Foo);
console.log(new DecoratedFoo().selam());Beklenen çıktı
etiket: demo merhaba
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bir decorator fabrikası ne döndürür?
- Bir string değeri
- Bir sınıf örneği
- Bir decorator fonksiyonu Doğru cevap
- Bir constructor fonksiyonu
Açıklama: Fabrika, decorator döndürür; dönen decorator daha sonra hedefe uygulanır. Sınıf örneği, string veya constructor dönmez; bunlar decorator'un değil, decorator'ın hedefinin parçalarıdır.
2 Fabrika parametresi
function Etiketli(____): (ctor: any) => any {
return function(ctor: any): any {
console.log(etiket);
return ctor;
};
}
function Etiketli(etiket: string): (ctor: any) => any {
return function(ctor: any): any {
console.log(etiket);
return ctor;
};
}
Açıklama: Fabrika, özelleştirme parametresi alır (etiket). ctor decorator'ın iç fonksiyonunun parametresidir; target ve key ise metot/özellik decorator'larına aittir, fabrikaya değil.
3 Fabrika parçaları
| Kavram | Anlamı |
|---|---|
Etiketli("demo") |
Fabrika çağrısı |
return function(ctor) |
Döndürülen decorator |
etiket: string |
Fabrika parametresi |
Etiketli("demo")(Foo) |
İki adımlı uygulama |