CodeBlanks Logo Icon CodeBlanks

Meydan okuma - Proxy ile doğrulama

JavaScript kursu · Uzman · Ders 61/63

Proxy ve Reflect ile bir ayar nesnesinin özelliklerini doğrulayan bir sarmalayıcı yazarsın.

Proxy ile doğrulama

Bu meydan okumada bir ayar nesnesini koruyan bir doğrulama sarmalayıcısı yazacaksın. new Proxy(target, handler) hedef nesneye dolaylı erişim sağlar; handler içindeki tuzaklar her işlemi yakalar.

set tuzağı bir özelliğe değer atanırken çalışır. İmzası (target, key, value, receiver)'dır. Geçersiz değerde hata fırlatır; geçerli değerde Reflect.set(target, key, value, receiver) çağrısı ile atamayı yapar ve dönen true'yu döndürürsün.

Reflect, Proxy tuzağıyla aynı imzaya sahip bir nesnedir; böylece varsayılan davranışı kolayca tekrar edebilirsin.

Uygulama Doğrulayan Proxy yaz

Bir handler nesnesi yaz: set tuzağı (target, key, value, receiver) imzasıyla. Eğer value bir sayı değilse throw new TypeError('sayı gerek') ile hata fırlat. Geçerli değerde Reflect.set(target, key, value, receiver) çağrısı yap ve sonucunu döndür. Son olarak new Proxy(settings, handler) ile sarmalanmış nesneyi oluştur.

Örnek çözümü göster
const handler = { set(target, key, value, receiver) { if (typeof value !== 'number') throw new TypeError('sayı gerek'); return Reflect.set(target, key, value, receiver); } }; yaz. Sonra const proxy = new Proxy(settings, handler); ile sarmala.

Örnek çözüm:
const handler = {
  set(target, key, value, receiver) {
    if (typeof value !== 'number') throw new TypeError('sayı gerek');
    return Reflect.set(target, key, value, receiver);
  }
};

const settings = {};
const proxy = new Proxy(settings, handler);

Kendini test et

  1. Reflect.set ne döndürür?

    const ok = Reflect.set(target, key, value, receiver);
    • Atanan değeri
    • Hedef nesneyi
    • Başarı durumunu (boolean)
    • Hiçbir şey (undefined)
    Cevabı göster

    Başarı durumunu (boolean) — Doğru! Reflect.set atama başarılıysa true, değilse false döndürür; bunu Proxy tuzağına geri verirsin.

  2. set tuzağı imzasını tamamla

    const handler = {
      set(target, key, value, ____) {
        if (typeof value !== 'number') throw new TypeError('sayı gerek');
        return Reflect.set(target, key, value, receiver);
      }
    };
    Cevabı göster
    const handler = {
      set(target, key, value, receiver) {
        if (typeof value !== 'number') throw new TypeError('sayı gerek');
        return Reflect.set(target, key, value, receiver);
      }
    };
  3. Proxy kavramlarını eşleştir

    new Proxy(t, h)
    Sarmalayıcı oluştur
    set tuzağı
    Atama yakala
    Reflect.set
    Varsayılan ata
    throw
    Geçersiz değer

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