JavaScript Academy · पाठ

Proxy के व्यावहारिक उपयोग

सत्यापन, लॉगिंग और प्रतिक्रियाशील ऑब्जेक्ट बनाइए।

पाठ 4, कुल 4 में से13 चरण

Proxy के व्यावहारिक उपयोग, CoddyKit पर JavaScript Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह JavaScript Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। JavaScript Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

व्यवहार में प्रॉक्सी

अब आप वास्तविक समस्याएँ हल करने के लिए प्रॉक्सी और Reflect को मिलाएँगे: सत्यापन, लॉगिंग, डिफ़ॉल्ट मान और बहुत कुछ। हर पैटर्न किसी साधारण ऑब्जेक्ट को बदले बिना उसे लपेटता है।

सत्यापन रैपर

स्कीमा लागू करें: नियम का पालन न करने वाली किसी भी लिखने की कार्रवाई को अस्वीकार करें। target साफ़ रहता है, क्योंकि खराब डेटा उसमें कभी पहुँचता ही नहीं।

function validated(obj, rules) {
  return new Proxy(obj, {
    set(target, prop, value, receiver) {
      const rule = rules[prop];
      if (rule && !rule(value)) {
        throw new TypeError('invalid value for ' + prop);
      }
      return Reflect.set(target, prop, value, receiver);
    }
  });
}

const user = validated({}, { age: v => v >= 0 });
user.age = 25;
console.log(user.age);
try { user.age = -1; } catch (e) { console.log(e.message); }

लॉगिंग रैपर

डीबगिंग के लिए हर पढ़ने और लिखने की कार्रवाई का पता लगाएँ; लॉग करने के बाद Reflect के ज़रिए कार्रवाई आगे भेजें।

function logged(obj) {
  return new Proxy(obj, {
    get(t, p, r) { console.log('GET ' + p); return Reflect.get(t, p, r); },
    set(t, p, v, r) { console.log('SET ' + p + '=' + v); return Reflect.set(t, p, v, r); }
  });
}

const data = logged({ count: 0 });
data.count = 5;
console.log(data.count);

डिफ़ॉल्ट मान

किसी भी अनुपस्थित प्रॉपर्टी के लिए fallback लौटाएँ, ताकि पढ़ने पर कभी undefined न मिले।

function withDefault(obj, fallback) {
  return new Proxy(obj, {
    get(t, p, r) {
      return p in t ? Reflect.get(t, p, r) : fallback;
    }
  });
}

const scores = withDefault({ ada: 90 }, 0);
console.log(scores.ada);
console.log(scores.unknown);

ऐरे की ऋणात्मक अनुक्रमणिका

get ट्रैप में अनुक्रमिकाओं का रूपांतरण करके ऐरे में Python-शैली की ऋणात्मक अनुक्रमिकाओं का समर्थन करें।

function negIndex(arr) {
  return new Proxy(arr, {
    get(t, p, r) {
      const i = Number(p);
      if (Number.isInteger(i) && i < 0) {
        return Reflect.get(t, t.length + i, r);
      }
      return Reflect.get(t, p, r);
    }
  });
}

const list = negIndex(['a', 'b', 'c']);
console.log(list[-1]);
console.log(list[0]);

केवल-पढ़ने योग्य दृश्य

ऐसा ऑब्जेक्ट उपलब्ध कराएँ जिसे पढ़ा जा सके, लेकिन कभी लिखा न जा सके। यह साझा config की सुरक्षा के लिए उपयोगी है।

function readonly(obj) {
  return new Proxy(obj, {
    set() { console.log('blocked write'); return false; },
    deleteProperty() { console.log('blocked delete'); return false; }
  });
}

const config = readonly({ apiUrl: '/api' });
config.apiUrl = '/hacked';
console.log(config.apiUrl);

पहुँच की गणना

हर प्रॉपर्टी को कितनी बार पढ़ा गया, यह target के बाहर counts संग्रहीत करके ट्रैक करें।

function counted(obj) {
  const counts = {};
  const proxy = new Proxy(obj, {
    get(t, p, r) {
      counts[p] = (counts[p] || 0) + 1;
      return Reflect.get(t, p, r);
    }
  });
  return { proxy, counts };
}

const { proxy, counts } = counted({ x: 1 });
proxy.x; proxy.x; proxy.x;
console.log(counts.x);

गणना की गई आभासी प्रॉपर्टियाँ

ऐसे व्युत्पन्न मान उपलब्ध कराएँ जो संग्रहीत नहीं हैं और हर पढ़ाई पर नए सिरे से गणना किए जाते हैं।

const rect = new Proxy({ width: 4, height: 3 }, {
  get(t, p, r) {
    if (p === 'area') return t.width * t.height;
    return Reflect.get(t, p, r);
  }
});

console.log(rect.area);
rect.width = 10;
console.log(rect.area);

अज्ञात पढ़ाइयों पर त्रुटि उत्पन्न करना

जब कोड ऐसी प्रॉपर्टी पढ़े जो मौजूद नहीं है, तब त्रुटि उत्पन्न करके टाइपिंग की गलतियाँ जल्दी पकड़ें।

function strict(obj) {
  return new Proxy(obj, {
    get(t, p, r) {
      if (typeof p === 'string' && !(p in t)) {
        throw new ReferenceError('unknown property: ' + p);
      }
      return Reflect.get(t, p, r);
    }
  });
}

const o = strict({ name: 'Ada' });
console.log(o.name);
try { console.log(o.naem); } catch (e) { console.log(e.message); }

चिंताओं को मिलाना

वास्तविक रैपर अक्सर एक ही हैंडलर में सत्यापन और लॉगिंग को मिलाते हैं, जहाँ हर ट्रैप कार्रवाई को Reflect के ज़रिए आगे भेजता है।

const account = new Proxy({ balance: 0 }, {
  set(t, p, v, r) {
    if (p === 'balance' && v < 0) throw new RangeError('no overdraft');
    console.log(p + ' set to ' + v);
    return Reflect.set(t, p, v, r);
  }
});

account.balance = 100;
console.log(account.balance);
try { account.balance = -50; } catch (e) { console.log(e.message); }

ये पैटर्न क्यों महत्वपूर्ण हैं

प्रॉक्सी मूल ऑब्जेक्ट या उसके कॉल करने वालों को अनावश्यक रूप से बदले बिना अतिरिक्त व्यवहार, सत्यापन, लॉगिंग, डिफ़ॉल्ट और पहुँच नियंत्रण जोड़ते हैं। प्रतिक्रियाशील रूपरेखाएँ state में होने वाले बदलावों पर ठीक इसी तरह नज़र रखती हैं। जब आपको पारदर्शी रूप से कार्रवाइयों को बीच में रोकना हो, तब इनका उपयोग करें।

const observed = new Proxy({ n: 0 }, {
  set(t, p, v, r) {
    const ok = Reflect.set(t, p, v, r);
    console.log(p + ' is now ' + t[p]);
    return ok;
  }
});
observed.n = 1;
observed.n = 2;

त्वरित जाँच

संग्रहीत किए जाने से पहले अमान्य मानों को अस्वीकार करने के लिए आप किस प्रॉक्सी ट्रैप का उपयोग करेंगे?

दोहराव: प्रॉक्सी के व्यावहारिक उपयोग

आपने वास्तविक समस्याओं पर प्रॉक्सी लागू किए:

  • सत्यापन वाला set ट्रैप खराब डेटा को अस्वीकार करता है।
  • लॉगिंग Reflect के ज़रिए पढ़ने और लिखने की कार्रवाइयों का पता लगाती है।
  • डिफ़ॉल्ट और आभासी प्रॉपर्टियाँ get ट्रैप में रहती हैं।
  • केवल-पढ़ने योग्य दृश्य, पहुँच की गणना और टाइपिंग की सख्त जाँच—ये सभी ऑब्जेक्ट को पारदर्शी रूप से लपेटते हैं।
शुरुआत निःशुल्क

एआई शिक्षक के साथ JavaScript सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
59
पाठ
200

अक्सर पूछे जाने वाले प्रश्न

क्या “Proxy के व्यावहारिक उपयोग” पाठ निःशुल्क है?

हाँ — JavaScript Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “Proxy के व्यावहारिक उपयोग” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। JavaScript Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“Proxy के व्यावहारिक उपयोग” में मैं क्या सीखूँगा?

सत्यापन, लॉगिंग और प्रतिक्रियाशील ऑब्जेक्ट बनाइए। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ JavaScript Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या JavaScript Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर JavaScript Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“Proxy के व्यावहारिक उपयोग” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस JavaScript Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर JavaScript Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Proxy बनाना
  2. get और set ट्रैप
  3. Reflect API
  4. Proxy के व्यावहारिक उपयोग
← JavaScript Academy पर वापस जाएँ