JavaScript
Reflect ile varsayılan davranış
Reflect ile trap içinde varsayılan davranışı uygulayıp yan etkileri yönetmeyi öğrenirsin.
Reflect ile varsayılan davranış
Bir trap yazarken çoğu zaman önce bir şey yapıp sonra normal davranışı uygulamak istersin. Bu normal davranışı elle yazmak yerine Reflect API'sine devredebilirsin.
Reflect.get(target, prop), Reflect.set(target, prop, value) ve benzeri metotlar, Proxy trap'lerinin aynısıdır. Yani trap içinde return Reflect.set(...) yazmak, hiç trap olmamış gibi davranmayı sağlar.
Bu, davranışı genişletmenin güvenli yoludur: varsayılanı tekrarlamazsın, ileride motor değişikliklerinde de doğru çalışır.
Reflect.apply ve Reflect.construct
Reflect yalnızca özellik okuma/yazma için değildir. Fonksiyon çağrıları ve kurulumlar için de kullanılır.
Reflect.apply(fn, thisArg, args) bir fonksiyonu belirli bir this ve argüman listesiyle çağırır; Function.prototype.apply gibi ama daha açık. Reflect.construct(Constructor, args) ise new Constructor(...args) ile aynıdır.
Bu metotlar özellikle apply ve construct trap'leri içinde faydalıdır: çağrıyı gerçekte yapmadan önce loglama, sayaclama veya kısıtlama ekleyebilirsin.
Uygulama Loglayan Proxy yaz
user adında name: 'Ayşe' özelliği olan bir nesne tanımla. handler içinde set(target, prop, value, receiver) trap yaz: console.log('set', prop) ile logla, sonra return Reflect.set(target, prop, value, receiver) yap. proxy = new Proxy(user, handler) ile oluştur. proxy.age = 28 ata ve console.log(proxy.age) ile yazdır.
Örnek çözümü göster
const user = { name: 'Ayşe' };
const handler = {
set(target, prop, value, receiver) {
console.log('set', prop);
return Reflect.set(target, prop, value, receiver);
}
};
const proxy = new Proxy(user, handler);
proxy.age = 28;
console.log(proxy.age);
Kendini test et
-
set trap içinde neden Reflect.set kullanılır?
- Daha hızlı çalıştığı için
- Varsayılan davranışı güvenle tekrar uygulamak için
- Hata ayıklamayı kapatmak için
- Proxy'yi dondurmak için
Cevabı göster
Varsayılan davranışı güvenle tekrar uygulamak için — Doğru! Reflect.set, varsayılan davranışı doğru ve kısaca uygular; invariantları da korur.
-
Varsayılan davranışı uygula
const handler = {
set(target, prop, value, receiver) {
console.log('set', prop);
return ____;
}
};
Cevabı göster
const handler = {
set(target, prop, value, receiver) {
console.log('set', prop);
return Reflect.set(target, prop, value, receiver);
}
};
-
Reflect metodunu işlemine eşle
- Reflect.get
- Özellik oku
- Reflect.set
- Özellik ata
- Reflect.has
- in operatörü
- Reflect.apply
- Fonksiyon çağır
- Reflect.construct
- new ile kur
Sıradaki ders: Symbol.iterator ile özel davranış