Proxy: target, handler və tələlər
Proxy başqa obyektin (target) ətrafında sarğıdır. Əməliyyatlar (oxumaq, yazmaq, in, delete, çağırış) əvvəlcə handler-dəki uyğun funksiyaya, yəni tələyə düşür. Tələ yazılmayıbsa, əməliyyat target-ə birbaşa gedir.
const p = new Proxy(target, handler);Tələ funksiyalarının ilk arqumenti həmişə target-dir. receiver Proxy-nin özüdür (və ya ondan miras alan obyekt).
💡
Reflectisə eyni əməliyyatların standart variantıdır: tələ içində “sadəcə normal işlə” demək üçünReflect.get,Reflect.setkimi metodlar çağırılır.
get və set: susmaya görə dəyər və doğrulama
get hər oxunuşu tutur. Burada olmayan açar üçün mətn qaytarırıq (prop simvol ola bilər, ona görə String(prop)):
const defaults = { theme: 'light', lang: 'az' };
const settings = new Proxy(defaults, {
get(target, prop, receiver) {
if (prop in target) return Reflect.get(target, prop, receiver);
return `no setting "${String(prop)}"`;
},
});
console.log(settings.theme);
console.log(settings.fontSize);set hər təyinatı tutur. Yanlış dəyərdə xəta atın, düzgündə Reflect.set nəticəsini qaytarın:
const user = new Proxy({}, {
set(target, prop, value, receiver) {
if (prop === 'age' && !Number.isInteger(value)) {
throw new TypeError('age must be an integer');
}
return Reflect.set(target, prop, value, receiver);
},
});
user.age = 30;
console.log(user.age);
try {
user.age = 'old';
} catch (e) {
console.log(`${e.name}: ${e.message}`);
}