CodeBlanks Logo Icon CodeBlanks

Reflect ile varsayılan davranış

JavaScript kursu · Uzman · Ders 38/63

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

  1. 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.

  2. 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);
      }
    };
  3. 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

Uzman bölümündeki tüm dersler