आप जैसे पाठक MUO का समर्थन करने में मदद करते हैं। जब आप हमारी साइट पर लिंक का उपयोग करके खरीदारी करते हैं, तो हम संबद्ध कमीशन अर्जित कर सकते हैं। और पढ़ें।

एक जावास्क्रिप्ट प्रॉक्सी ऑब्जेक्ट आपको मूल को संशोधित किए बिना किसी अन्य ऑब्जेक्ट के व्यवहार को इंटरसेप्ट और कस्टमाइज़ करने देता है।

प्रॉक्सी ऑब्जेक्ट का उपयोग करके, आप डेटा को मान्य कर सकते हैं, अतिरिक्त कार्यक्षमता प्रदान कर सकते हैं और संपत्तियों और कार्यों तक पहुंच को नियंत्रित कर सकते हैं।

प्रॉक्सी ऑब्जेक्ट के उपयोग के बारे में सभी जानकारी प्राप्त करें और जानें कि आप उन्हें JavaScript में कैसे बना सकते हैं।

एक प्रॉक्सी वस्तु बनाना

जावास्क्रिप्ट में, आप का उपयोग करके प्रॉक्सी ऑब्जेक्ट बना सकते हैं प्रतिनिधिनिर्माता. यह कंस्ट्रक्टर दो तर्क लेता है: a लक्ष्य प्रॉक्सी को चारों ओर लपेटने के लिए ऑब्जेक्ट और a हैंडलर ऑब्जेक्ट जिसका गुण संचालन करते समय प्रॉक्सी के व्यवहार को परिभाषित करता है।

यह इन तर्कों को लेता है और एक वस्तु बनाता है जिसका उपयोग आप लक्ष्य वस्तु के स्थान पर कर सकते हैं। यह बनाई गई वस्तु कोर ऑपरेशंस को फिर से परिभाषित कर सकती है जैसे गुण प्राप्त करना, सेट करना और परिभाषित करना। आप इन प्रॉक्‍सी ऑब्‍जेक्‍ट्स का उपयोग प्रॉपर्टी एक्‍सेस को लॉग करने और इनपुट को वैलिडेट करने, फॉर्मेट करने या सैनिटाइज करने के लिए भी कर सकते हैं।

उदाहरण के लिए:

कॉन्स्ट मूल वस्तु = {
फू: "छड़"
}

कॉन्स्ट हैंडलर = {
पाना: समारोह(लक्ष्य, संपत्ति){
वापस करना लक्ष्य [संपत्ति];
},
तय करना: समारोह(लक्ष्य, संपत्ति, मूल्य){
लक्ष्य [संपत्ति] = मान;
}
};

कॉन्स्ट प्रॉक्सी = नयाप्रतिनिधि(मूल ऑब्जेक्ट, हैंडलर)

यह कोड एक लक्षित वस्तु बनाता है, मूल वस्तु, एकल संपत्ति के साथ, फू, और एक हैंडलर वस्तु, हैंडलर. हैंडलर ऑब्जेक्ट में दो गुण होते हैं, पाना और तय करना. इन गुणों को जाल के रूप में जाना जाता है।

एक प्रॉक्सी ऑब्जेक्ट ट्रैप एक फ़ंक्शन है जिसे जब भी आप प्रॉक्सी ऑब्जेक्ट पर निर्दिष्ट क्रिया करते हैं तो कहा जाता है। ट्रैप आपको प्रॉक्सी ऑब्जेक्ट के व्यवहार को इंटरसेप्ट और कस्टमाइज़ करने की अनुमति देता है। प्रॉक्सी ऑब्जेक्ट से किसी प्रॉपर्टी को एक्सेस करना कॉल करता है पाना ट्रैप, और प्रॉक्सी ऑब्जेक्ट से किसी संपत्ति को संशोधित या हेरफेर करना कॉल करता है तय करना जाल।

अंत में, कोड के साथ एक प्रॉक्सी ऑब्जेक्ट बनाता है प्रतिनिधि निर्माता। यह गुजरता है मूल वस्तु और हैंडलर क्रमशः लक्ष्य वस्तु और हैंडलर के रूप में।

प्रॉक्सी ऑब्जेक्ट्स का उपयोग करना

जावास्क्रिप्ट में प्रॉक्सी ऑब्जेक्ट्स के कई उपयोग हैं, जिनमें से कुछ इस प्रकार हैं।

किसी वस्तु में कार्यक्षमता जोड़ना

आप किसी मौजूदा ऑब्जेक्ट को लपेटने के लिए प्रॉक्सी ऑब्जेक्ट का उपयोग कर सकते हैं और लॉगिंग या जैसी नई कार्यक्षमता जोड़ सकते हैं त्रुटि प्रबंधन, मूल वस्तु को संशोधित किए बिना।

नई कार्यक्षमता जोड़ने के लिए, आपको इसका उपयोग करने की आवश्यकता होगी प्रतिनिधि कन्स्ट्रक्टर और उन क्रियाओं के लिए एक या अधिक जाल परिभाषित करें जिन्हें आप रोकना चाहते हैं।

उदाहरण के लिए:

कॉन्स्ट उपयोगकर्ता वस्तु = {
पहला नाम: "कैनेडी",
उपनाम: "मार्टिन्स",
उम्र: 20,
};

कॉन्स्ट हैंडलर = {
पाना: समारोह(लक्ष्य, संपत्ति){
सांत्वना देना।लकड़ी का लट्ठा(`संपत्ति प्राप्त करना'${संपत्ति}"`);
वापस करना लक्ष्य [संपत्ति];
},
तय करना: समारोह(लक्ष्य, संपत्ति, मूल्य){
सांत्वना देना।लकड़ी का लट्ठा(`सेटिंग संपत्ति "${संपत्ति}" महत्व के लिए "${मूल्य}"`);
लक्ष्य [संपत्ति] = मान;
},
};

कॉन्स्ट प्रॉक्सी = नयाप्रतिनिधि(यूजरऑब्जेक्ट, हैंडलर);

सांत्वना देना.लॉग (प्रॉक्सी.फर्स्टनाम); // संपत्ति प्राप्त करना "फर्स्टनाम" कैनेडी
सांत्वना देना.लॉग (प्रॉक्सी.लास्टनाम); // संपत्ति "अंतिम नाम" मार्टिंस प्राप्त करना
प्रॉक्सी उम्र = 23; // संपत्ति सेट करना "आयु" महत्व के लिए "23"

यह कोड ब्लॉक प्रॉक्सी ट्रैप के माध्यम से कार्यक्षमता जोड़ता है, पाना और तय करना. अब, जब आप की किसी संपत्ति को एक्सेस या संशोधित करने का प्रयास करते हैं userObject, प्रॉक्सी ऑब्जेक्ट संपत्ति तक पहुँचने या संशोधित करने से पहले आपके ऑपरेशन को पहले कंसोल में लॉग करेगा।

किसी वस्तु पर सेट करने से पहले डेटा को मान्य करना

आप डेटा को सत्यापित करने के लिए प्रॉक्सी ऑब्जेक्ट का उपयोग कर सकते हैं और यह सुनिश्चित कर सकते हैं कि यह किसी ऑब्जेक्ट पर सेट करने से पहले कुछ मानदंडों को पूरा करता है। आप सत्यापन तर्क को a में परिभाषित करके ऐसा कर सकते हैं तय करना में फँसाना हैंडलर वस्तु।

उदाहरण के लिए:

कॉन्स्ट उपयोगकर्ता वस्तु = {
पहला नाम: "कैनेडी",
उपनाम: "मार्टिन्स",
उम्र: 20,
};

कॉन्स्ट हैंडलर = {
पाना: समारोह(लक्ष्य, संपत्ति){
सांत्वना देना।लकड़ी का लट्ठा(`संपत्ति प्राप्त करना'${संपत्ति}"`);
वापस करना लक्ष्य [संपत्ति];
},
तय करना: समारोह(लक्ष्य, संपत्ति, मूल्य){
अगर (
संपत्ति "आयु" &&
के प्रकार मूल्य == "संख्या" &&
मान > 0 &&
मूल्य <120
) {
सांत्वना देना।लकड़ी का लट्ठा(`सेटिंग संपत्ति "${संपत्ति}" महत्व के लिए "${मूल्य}"`);
लक्ष्य [संपत्ति] = मान;
} अन्य {
फेंकनानयागलती("अमान्य मापदंड। कृपया समीक्षा करें और सही करें।");
}
},
};

कॉन्स्ट प्रॉक्सी = नयाप्रतिनिधि(यूजरऑब्जेक्ट, हैंडलर);
प्रॉक्सी.आयु = 21;

यह कोड ब्लॉक इसमें सत्यापन नियम जोड़ता है तय करना जाल। आप को कोई भी मान असाइन कर सकते हैं आयु ए पर संपत्ति userObject उदाहरण। लेकिन, जोड़े गए सत्यापन नियमों के साथ, आप केवल आयु संपत्ति के लिए एक नया मान निर्दिष्ट कर सकते हैं यदि यह एक संख्या है, 0 से अधिक है, और 120 से कम है। कोई भी मान जिसे आप सेट करने का प्रयास करते हैं आयु संपत्ति जो आवश्यक मानदंडों को पूरा नहीं करती है, एक त्रुटि को ट्रिगर करेगी और एक त्रुटि संदेश प्रिंट करेगी।

वस्तु गुणों तक पहुँच को नियंत्रित करना

आप किसी वस्तु के कुछ गुणों को छिपाने के लिए प्रॉक्सी वस्तुओं का उपयोग कर सकते हैं। में प्रतिबंध तर्क को परिभाषित करके ऐसा करें पाना उन संपत्तियों के लिए ट्रैप, जिन तक आप पहुंच को नियंत्रित करना चाहते हैं।

उदाहरण के लिए:

कॉन्स्ट उपयोगकर्ता वस्तु = {
पहला नाम: "कैनेडी",
उपनाम: "मार्टिन्स",
उम्र: 20,
फ़ोन: 1234567890,
ईमेल: "फू@बार.कॉम",
};

कॉन्स्ट हैंडलर = {
पाना: समारोह(लक्ष्य, संपत्ति){
अगर (संपत्ति "फ़ोन" || संपत्ति "ईमेल") {
फेंकनानयागलती("सूचना तक पहुंच अस्वीकृत");
} अन्य {
सांत्वना देना।लकड़ी का लट्ठा(`संपत्ति प्राप्त करना'${संपत्ति}"`);
वापस करना लक्ष्य [संपत्ति];
}
},
तय करना: समारोह(लक्ष्य, संपत्ति, मूल्य){
सांत्वना देना।लकड़ी का लट्ठा(`सेटिंग संपत्ति "${संपत्ति}" महत्व के लिए "${मूल्य}"`);
लक्ष्य [संपत्ति] = मान;
},
};

कॉन्स्ट प्रॉक्सी = नयाप्रतिनिधि(यूजरऑब्जेक्ट, हैंडलर);

सांत्वना देना.लॉग (प्रॉक्सी.फर्स्टनाम); // संपत्ति प्राप्त करना "फर्स्टनाम" कैनेडी
सांत्वना देनालॉग (प्रॉक्सी.ईमेल); // त्रुटि फेंकता है

ऊपर दिया गया कोड ब्लॉक कुछ प्रतिबंध जोड़ता है पाना जाल। प्रारंभ में, आप पर सभी उपलब्ध संपत्तियों तक पहुंच सकते हैं userObject. जोड़े गए नियम संवेदनशील जानकारी जैसे उपयोगकर्ता के ईमेल या फोन तक पहुंच को रोकते हैं। इन गुणों में से किसी एक को एक्सेस करने का प्रयास करने से त्रुटि उत्पन्न होगी।

अन्य प्रॉक्सी जाल

पाना और तय करना जाल सबसे आम और उपयोगी हैं, लेकिन 11 अन्य जावास्क्रिप्ट प्रॉक्सी जाल हैं। वे हैं:

  • आवेदन करना: द आवेदन करना जब आप प्रॉक्सी ऑब्जेक्ट पर फ़ंक्शन कॉल करते हैं तो ट्रैप चलता है।
  • CONSTRUCT: द CONSTRUCT जब आप प्रॉक्सी ऑब्जेक्ट से ऑब्जेक्ट बनाने के लिए नए ऑपरेटर का उपयोग करते हैं तो ट्रैप चलता है।
  • डिलीटप्रॉपर्टी: द डिलीटप्रॉपर्टी जब आप उपयोग करते हैं तो ट्रैप चलता है मिटाना ऑपरेटर प्रॉक्सी वस्तु से एक संपत्ति को हटाने के लिए।
  • है - द है जब आप उपयोग करते हैं तो ट्रैप चलता है में ऑपरेटर यह जांचने के लिए कि प्रॉक्सी ऑब्जेक्ट पर कोई संपत्ति मौजूद है या नहीं।
  • onekeys - द onekeys ट्रैप तब चलता है जब आप या तो कॉल करते हैं Object.getOwnPropertyNames या Object.getOwnPropertySymbols प्रॉक्सी ऑब्जेक्ट पर काम करता है।
  • getOwnPropertyDescriptor - द getOwnPropertyDescriptor जब आप कॉल करते हैं तो ट्रैप चलता है Object.getOwnPropertyDescriptor प्रॉक्सी ऑब्जेक्ट पर काम करता है।
  • परिभाषितप्रॉपर्टी - द परिभाषितप्रॉपर्टी जब आप कॉल करते हैं तो ट्रैप चलता है Object.defineProperty प्रॉक्सी ऑब्जेक्ट पर काम करता है।
  • preventExtensions - द preventExtensions जब आप कॉल करते हैं तो ट्रैप चलता है Object.preventExtensions प्रॉक्सी ऑब्जेक्ट पर काम करता है।
  • एक्स्टेंसिबल है - द एक्स्टेंसिबल है जब आप कॉल करते हैं तो ट्रैप चलता है वस्तु एक्स्टेंसिबल है प्रॉक्सी ऑब्जेक्ट पर काम करता है।
  • getPrototypeOf - द getPrototypeOf जब आप कॉल करते हैं तो ट्रैप चलता है ऑब्जेक्ट.गेटप्रोटोटाइपऑफ प्रॉक्सी ऑब्जेक्ट पर काम करता है।
  • सेटप्रोटोटाइपऑफ - द सेटप्रोटोटाइपऑफ जब आप कॉल करते हैं तो ट्रैप चलता है Object.setPrototypeOf प्रॉक्सी ऑब्जेक्ट पर काम करता है।

की तरह तय करना और पाना जाल, आप इन जालों का उपयोग मूल को संशोधित किए बिना अपने ऑब्जेक्ट में कार्यक्षमता, सत्यापन और नियंत्रण की नई परतें जोड़ने के लिए कर सकते हैं।

प्रॉक्सी ऑब्जेक्ट्स का विपक्ष

प्रॉक्सी ऑब्जेक्ट किसी ऑब्जेक्ट में कस्टम कार्यक्षमता या सत्यापन जोड़ने के लिए एक शक्तिशाली टूल हो सकता है। लेकिन उनमें कुछ संभावित कमियां भी हैं। ऐसी ही एक खामी डिबगिंग में कठिनाई है, क्योंकि यह देखना मुश्किल हो सकता है कि पर्दे के पीछे क्या हो रहा है।

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