CodeBlanks Logo Icon CodeBlanks

Proxy kullanım örnekleri

JavaScript kursu · İleri seviye · Ders 64/100

Doğrulama, loglama ve izleme gibi gerçek proxy kullanımlarını öğrenirsin.

Doğrulama proxy'si

Proxy'nin en yaygın kullanımı doğrulamadır. set trap içine bir koşul koyarak bir özelliğe yalnızca geçerli değerlerin yazılmasını sağlarsın.

const handler = {
  set(target, prop, value) {
    if (typeof value !== 'number') {
      throw new TypeError('sayı gerek');
    }
    return Reflect.set(target, prop, value);
  }
};

Burada age özelliğine sayı dışında bir değer yazmak hataya yol açar. Doğrulama mantığı tek bir yerde, proxy içinde toplanır; böylece her atama noktasında aynı koşul uygulanır.

Loglama ve izleme proxy'si

Proxy, loglama ve izleme için de kullanışlıdır. get trap içine bir console.log satırı ekleyerek her özellik okumasını kayda alırsın; set trap içine ekleyerek her atamayı izlersin.

const handler = {
  get(target, prop) {
    console.log('read', prop);
    return Reflect.get(target, prop);
  }
};

Bu desen, hata ayıklama sırasında hangi özelliğe ne zaman erişildiğini görmek için çok güçlüdür. Reflect çağrısı kaldırılırsa normal davranış bozulur; bu yüzden log satırından sonra Reflect ile varsayılan davranışı uygularsın.

Uygulama Doğrulama proxy'si yaz

user adında boş bir nesne tanımla. handler içinde set trap yaz: prop === 'age' ve typeof value !== 'number' ise throw new TypeError('age must be a number') fırlat; değilse Reflect.set(target, prop, value) döndür. proxy değişkenini 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 = {};
const handler = {
  set(target, prop, value) {
    if (prop === 'age' && typeof value !== 'number') {
      throw new TypeError('age must be a number');
    }
    return Reflect.set(target, prop, value);
  }
};
const proxy = new Proxy(user, handler);
proxy.age = 28;
console.log(proxy.age);

Kendini test et

  1. Doğrulama proxy'sinin set trap'i ne yapar?

    • değeri Reflect.set ile yazar ama önce kontrol eder
    • her zaman true döndürür
    • değeri yoksayar
    • yalnızca console.log yapar
    Cevabı göster

    değeri Reflect.set ile yazar ama önce kontrol eder — Doğru! Doğrulama proxy'si önce değeri kontrol eder, sonra Reflect.set ile yazar.

  2. Doğrulama hatası fırlat

    if (typeof value !== 'number') {
      ____;
    }
    Cevabı göster
    if (typeof value !== 'number') {
      throw new TypeError('age must be a number');
    }
  3. Proxy kullanım örneklerini eşleştir

    doğrulama
    geçersiz değeri engeller
    loglama
    erişimi kaydeder
    izleme
    değişikliği bildirir
    varsayılan
    Reflect ile döner

İleri seviye bölümündeki tüm dersler