2011-04-11 15 views
7

मैंने Dojo.declare के साथ नई ऑब्जेक्ट्स बनाई हैं। वस्तुओं के लिए ऑपरेटर == अधिभार कैसे करें?जावास्क्रिप्ट ऑब्जेक्ट्स के लिए ऑपरेटर समानता को ओवरलोड कैसे करें

+0

संभावित डुप्लिकेट [जावास्क्रिप्ट में अंकगणित ऑपरेटर ओवरलोडिंग?] (Http://stackoverflow.com/questions/1634341/overloading-arithmetic-operators-in-javascript) –

+0

यहां: https://stackoverflow.com/q/ 10539 9 38/632951 – Pacerier

उत्तर

9

आप == ओवरलोड नहीं कर सकते, लेकिन == एक अंतर्निहित .toString() कॉल है, तो जो कुछ भी .toString() रिटर्न (थोड़े) आप को प्रभावी ढंग से == ओवरलोड करने की अनुमति देगा:

function foo(){} 
foo.prototype.toString = function(){ return 42; } 

var x = new foo(); 
x == 42; // true 

कैसे डोजो में ऐसा करने के लिए के रूप में, मैं डोजो का उपयोग नहीं करता, क्षमा करें, लेकिन यह बात यह है कि आपको जो भी ऑब्जेक्ट बनाता है उसका संदर्भ मिलता है और मेरे उदाहरण में thatObject.prototype.toString जोड़ता है।

+5

एक वस्तु और एक आदिम के लिए, शायद। हालांकि 'valueOf' वह है जिसे आप ओवरराइड करना चाहते हैं। लेकिन दो वस्तुओं के लिए नहीं। 'नई स्ट्रिंग (' x ')! = नया स्ट्रिंग (' x ')' इस तथ्य के बावजूद कि दोनों ऑब्जेक्ट्स 'toString' विधियां समान मान लौटाती हैं। –

+1

@ माइक - मेह। आप सही हे। ऑब्जेक्ट समानता लागू नहीं होती है क्योंकि स्मृति पता के लिए केवल एक चेक है ... –

+1

ऑब्जेक्ट और आदिम तुलना के लिए भी प्राथमिकता 'valueOf' कार्यान्वयन के लिए दी जाएगी। –

6

आप नहीं कर सकते। जावास्क्रिप्ट ऑपरेटर ओवरलोडिंग का समर्थन नहीं करता है।

3

आप जावा/ईसीएमएस्क्रिप्ट में नहीं जा सकते हैं। आप केवल Adobe से ExtendScript का उपयोग कर ऑपरेटरों को अधिभारित कर सकते हैं। this example देखें। यह भी देखें blog entry (प्रो), या this (अनुबंध)।

+0

ऐसा लगता है कि केवल एक्शनस्क्रिप्ट पर लागू होता है। –

+0

@ जोचिम सॉर: wtf? मैंने यही जवाब दिया है! ईसीएमएस्क्रिप्ट के लिए ऑपरेटर अधिभार पर चर्चा करने के लिए कुछ लिंक जोड़ना। – KooiInc

+0

आपके पिछले शब्द ने यह स्पष्ट नहीं किया है। –

संबंधित मुद्दे