JavaScript
Meydan okuma - Proxy ile doğrulama
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
-
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.
-
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);
}
};
-
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
Sıradaki ders: Meydan okuma - Canvas oyun akışı