खोज…
परिचय
जावास्क्रिप्ट में एक प्रॉक्सी का उपयोग वस्तुओं पर मौलिक संचालन को संशोधित करने के लिए किया जा सकता है। ES6 में प्रॉक्सी पेश किए गए थे। एक वस्तु पर एक प्रॉक्सी ही एक वस्तु है, जिसमें जाल है । जब प्रॉक्सी पर ऑपरेशन किए जाते हैं तो ट्रैप शुरू हो सकते हैं। इसमें प्रॉपर्टी लुकअप, फंक्शन कॉलिंग, प्रॉपर्टीज मॉडिफाई करना, प्रॉपर्टीज जोड़ना, वगैरह शामिल हैं। जब कोई लागू जाल परिभाषित नहीं होता है, तो ऑपरेशन प्रॉक्सी ऑब्जेक्ट पर किया जाता है जैसे कि कोई प्रॉक्सी नहीं था।
वाक्य - विन्यास
let proxied = new Proxy(target, handler);
पैरामीटर
पैरामीटर | विवरण |
---|---|
लक्ष्य | लक्ष्य ऑब्जेक्ट, इस ऑब्जेक्ट पर क्रियाएं (प्राप्त करना, स्थापित करना, आदि ...) को हैंडलर को ट्राउट किया जाएगा |
हैंडलर | एक वस्तु जो लक्ष्य वस्तु पर कार्रवाई को रोकने के लिए "जाल" को परिभाषित कर सकती है (प्राप्त करना, स्थापित करना, आदि ...) |
टिप्पणियों
उपलब्ध "जाल" की एक पूरी सूची एमडीएन - प्रॉक्सी - "हैंडलर ऑब्जेक्ट के तरीके" पर मिल सकती है।
बहुत सरल प्रॉक्सी (सेट जाल का उपयोग करके)
यह प्रॉक्सी बस स्ट्रिंग को " went through proxy"
लक्ष्य object
पर सेट प्रत्येक स्ट्रिंग संपत्ति में जोड़ देती है।
let object = {};
let handler = {
set(target, prop, value){ // Note that ES6 object syntax is used
if('string' === typeof value){
target[prop] = value + " went through proxy";
}
}
};
let proxied = new Proxy(object, handler);
proxied.example = "ExampleValue";
console.log(object);
// logs: { example: "ExampleValue went trough proxy" }
// you could also access the object via proxied.target
संपत्ति की तलाश में
प्रॉपर्टी लुकअप को प्रभावित करने के get
गेट हैंडलर का उपयोग किया जाना चाहिए।
इस उदाहरण में, हम संपत्ति खोज को संशोधित करते हैं ताकि न केवल मूल्य, बल्कि उस मूल्य का प्रकार भी वापस आ जाए। हम इसे कम करने के लिए रिफ्लेक्ट का उपयोग करते हैं।
let handler = {
get(target, property) {
if (!Reflect.has(target, property)) {
return {
value: undefined,
type: 'undefined'
};
}
let value = Reflect.get(target, property);
return {
value: value,
type: typeof value
};
}
};
let proxied = new Proxy({foo: 'bar'}, handler);
console.log(proxied.foo); // logs `Object {value: "bar", type: "string"}`