CodeBlanks Logo Icon CodeBlanks

Proxy ile doğrulama

JavaScript kursu · Uzman · Ders 37/63

Proxy ile özellik atamalarını doğrulayan bir sarmalayıcı yazmayı öğrenirsin.

Proxy ile doğrulama

Bir Proxy, hedef nesnenin başına konan bir bekçidir. set trap'i sayesinde atamayı kabul etmeden önce değeri denetleyebilir, geçersizse reddedebilirsin.

Yaygın bir desen: set(target, prop, value) trap'inde tip, aralık veya biçim kontrolü yap. Koşula uymuyorsa throw new TypeError('...') fırlat. Böylece nesne hiçbir zaman geçersiz bir durumda kalmaz.

Denetimleri tek bir yerde toplamak, her atamada aynı denetimi uygulamak demektir; bu da hataları erkenden yakalar.

Doğrulama desenleri

Doğrulama desenleri çeşitlidir. Tip kontrolü typeof value === 'number' gibi bir sınama yapar. Aralık kontrolü bir sayı belirli bir aralıkta mı diye bakar: value >= 0 && value <= 120. Sabit değer kontrolü ise özelliğin yalnızca izin verilen listeden bir değer almasına izin verir.

Hangisini seçeceğin veriye bağlıdır. Bir yaş için aralık, bir rol için sabit liste, bir e-posta için biçim kontrolü uygundur. Doğrulama başarısız olursa anlamlı bir hata iletisi vermek, hatanın yerini bulmayı kolaylaştırır.

Uygulama Negatif yaşı reddet

user adında age: 0 özelliği olan bir nesne tanımla. handler içine bir set(target, prop, value) trap yaz: prop === 'age' ve value < 0 ise throw new TypeError('negatif yaş') fırlat; değilse target[prop] = value yapıp true döndür. proxy = new Proxy(user, handler) ile oluştur. proxy.age = 25 ata ve console.log(proxy.age) ile yazdır.

Örnek çözümü göster
const user = { age: 0 };
const handler = {
  set(target, prop, value) {
    if (prop === 'age' && value < 0) {
      throw new TypeError('negatif yaş');
    }
    target[prop] = value;
    return true;
  }
};
const proxy = new Proxy(user, handler);
proxy.age = 25;
console.log(proxy.age);

Kendini test et

  1. Bir set trap TypeError fırlatırsa ne olur?

    • Atama sessizce yok sayılır
    • Atama yine de yapılır, hata loglanır
    • Atama yapılmaz, hata çağırana yayılır
    • Nesne dondurulur
    Cevabı göster

    Atama yapılmaz, hata çağırana yayılır — Doğru! set trap throw yaptığında atama gerçekleşmez ve hata normal şekilde çağırana yayılır.

  2. Hatayı fırlat

    const handler = {
      set(target, prop, value) {
        if (prop === 'age' && typeof value !== 'number') {
          ____;
        }
        target[prop] = value;
        return true;
      }
    };
    Cevabı göster
    const handler = {
      set(target, prop, value) {
        if (prop === 'age' && typeof value !== 'number') {
          throw new TypeError('tip hatali');
        }
        target[prop] = value;
        return true;
      }
    };
  3. Trap'i işlemine eşle

    set
    Atama ve doğrulama
    get
    Özellik okuma
    has
    in operatörü
    deleteProperty
    delete operatörü

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