Proxy ile doğrulama
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
-
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.
-
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; } }; -
Trap'i işlemine eşle
- set
- Atama ve doğrulama
- get
- Özellik okuma
- has
- in operatörü
- deleteProperty
- delete operatörü