Proxy ஒரு பொருளை போர்த்திக்கொண்டு அதன் மீது அடிப்படை செயல்பாடுகளை (get, set, has, delete, முதலியன) trap என்று அழைக்கப்படும் கையாளர் செயல்பாடுகளின் மூலம் குறுக்கிட அனுமதிக்கிறது. Reflect இந்த செயல்பாடுகளின் இயல்பான பதிப்புகளை செயல்பாடுகளாக வழங்குகிறது, இதனால் trap புதிய நடத்தையை சுத்தமாக முன்னேற்றம் செய்யலாம்.
const user = { name: "Ann" };
const proxied = new Proxy(user, {
get(target, key) {
console.log(`read ${key}`);
return Reflect.get(target, key); // default get behavior
},
set(target, key, value) {
if (key === "age" && value < 0) throw new Error("invalid age"); // validation
return Reflect.set(target, key, value);
},
});
proxied.name; // logs "read name" → "Ann"
proxied.age = -5; // throws — intercepted by the set trap
உண்மையான பயன்பாட்டு வழக்குகள்
- Reactivity: Vue 3 இன் reactivity அமைப்பு state ஐ Proxy இல் மூடுகிறது, இதனால் நீ ஒரு சொத்தை எப்போது படித்தாய் அல்லது எழுதினாய் என்பதை சரியாக அறிந்து, அதன் படி மீண்டும் சரிக்கிறது.
- சரிபார்ப்பு / அணுகல் கட்டுப்பாடு: சொத்து எழுதுதலில் விதிகளை கட்டுப்படுத்து.
- Logging / கணக்கெடுப்பு: பிழை நீக்கத்திற்காக அணுகலைக் கண்டறிக.
- இயல்பான மதிப்புகள் / மெய்நிக குணங்கள்: காணாமல் போன விசைகளுக்கு கணக்கிடப்பட்ட மதிப்புகளை வழங்கு.
- எதிர்மறை வரிசை குறியீடுகள், மாறாத போர்வைகள், API வாடிக்கையாளர்கள் இயங்குநேர முறைகளை உৎপாதிக்கிறார்கள்.
Reflect ஏன் உள்ளது
ஒரு trap க்குள் இயல்பான செயல்பாட்டை நீ செய்ய வேண்டும். Reflect.get/set (target[key] க்கு பதிலாக) பயன்படுத்துவது சரியான receiver போன்ற விளிம்பு நிலைகளை சரியாக கையாளுகிறது, இனப்பெருக்க getters/setters க்கு.
இது ஏன் முக்கியமானது
Proxy கள் சக்திவாய்ந்த மெட்டா-ப்রোக்ராமிங்கை செயல்படுத்துகிறது, இது கাঠামോ நம்பியுள்ளது.
வகையில் உள்ள சமநிலை என்பது overhead — ஒவ்வொரு செயல்பாடும் உன் trap வழியாக செல்கிறது — எனவே அவற்றை பயன்படுத்து அங்கு குறுக்கிடுதல் உண்மையில் மூல்য மதிப்பு, அன்றாடப் பொருட்களுக்கு அல்ல.
