2016-08-27 10 views
6

Reflect और Proxy के बीच कोई महत्वपूर्ण अंतर है?प्रॉक्सी कन्स्ट्रक्टर और प्रतिबिंब के बीच क्या अंतर है?

क्या प्रलेखित है से ऐसा प्रतीत होता है कि वे बहुत ज्यादा एक ही क्षमताओं, अलग से है:

  • प्रतिबिंबित समय में केवल एक जाल को निर्दिष्ट करने में सक्षम किया जा रहा है।
  • प्रॉक्सी revocable है।
  • प्रॉक्सी एक निर्माता है।

यदि ऊपर दी गई सूची सभी मतभेदों को बताती है, तो दोनों के लिए तर्क क्या है?

उत्तर

9

प्रतिबिंबित करें और प्रॉक्सी के पास पूरी तरह से अलग-अलग उद्देश्यों और विभिन्न क्षमताओं हैं।

MDN describes Proxy in that way:

Proxy वस्तु मौलिक ऑपरेशन (उदा संपत्ति देखने, असाइनमेंट, गणन, समारोह मंगलाचरण, आदि) के लिए कस्टम व्यवहार को परिभाषित करने के लिए किया जाता है।

And Reflect in that way:

प्रतिबिंबित है एक अंतर्निहित उद्देश्य यह है कि interceptable जावास्क्रिप्ट कार्यों के लिए तरीकों प्रदान करता है। विधियां proxy handlers के समान हैं।

मुझे एहसास है कि आप शायद पहले ही इसे पढ़ चुके हैं, इसलिए मैं इसे और समझाने के लिए एक उदाहरण का उपयोग करूंगा।

const obj = { 
    a: 'foo', 
    b: 'bar', 
}; 

आप संपत्ति a ऐसे ही संपत्ति एक्सेसर का उपयोग कर उपयोग कर सकते हैं:

console.log(Reflect.get(obj, 'a')); // 'foo' 
:

console.log(obj.a); // 'foo' 

आप एक ही का उपयोग कर Reflect.get() विधि कर सकते हैं

मान लीजिए कि आप एक वस्तु करते हैं

आप उस ऑब्जेक्ट का प्रॉक्सी भी बना सकते हैं प्रॉक्सी कन्स्ट्रक्टर। हम सभी संपत्ति लुकअप को रोकने के लिए get हैंडलर का उपयोग करेंगे।

const proxy = new Proxy(obj, { 
    get(target, property) { 
    return property in target ? target[property] : 'default'; 
    }, 
}); 

अब स्ट्रिंग 'default' में एक अपरिभाषित संपत्ति परिणाम प्राप्त करने का उपयोग कर या तो संपत्ति एक्सेसर या Reflect.get():

console.log(proxy.c); // 'default' 
console.log(Reflect.get(proxy, 'c')); // 'default' 

प्रॉक्सी और प्रतिबिंबित एक साथ महान काम कर सकते हैं। उदाहरण के लिए आप प्रतिबिंब का उपयोग कर नो-ऑप get हैंडलर के साथ प्रॉक्सी बना सकते हैं:

new Proxy(obj, { 
    get: Reflect.get, 
}); 
संबंधित मुद्दे