, इस वी 8 में फ़ायरफ़ॉक्स और मैं JavaScriptCore लगता है, लेकिन नहीं है और यह विशिष्ट जानकारी नहीं है। चूंकि आप ऑपरेशन और तुलनाकर्ताओं को जाल कर सकते हैं, इसलिए आप कुछ परिस्थितियों में ऑपरेटर देशी अधिभार को कार्यान्वित कर सकते हैं।
var actions = [];
var overload = {
valueOf: function(){
var caller = arguments.callee.caller;
actions.push({
operation: caller.name,
left: caller.arguments[0] === this ? "unknown" : this,
right: caller.arguments[0]
});
return Object.prototype.toString.call(this);
}
};
overload.toString = overload.valueOf;
overload == 10;
overload === 10;
overload * 10;
10/overload;
overload in window;
-overload;
+overload;
overload < 5;
overload > 5;
[][overload];
overload == overload;
console.log(actions);
आउटपुट:
[ { operation: 'EQUALS',
left: overload,
right: 10 },
{ operation: 'MUL',
left: overload,
right: 10 },
{ operation: 'DIV',
left: 'unknown',
right: overload },
{ operation: 'IN',
left: overload,
right: DOMWindow },
{ operation: 'UNARY_MINUS',
left: overload,
right: undefined },
{ operation: 'TO_NUMBER',
left: overload,
right: undefined },
{ operation: 'COMPARE',
left: overload,
right: 5 },
{ operation: 'COMPARE',
left: 'unknown',
right: overload },
{ operation: 'ToString',
left: 'unknown',
right: overload } ]
इस बिंदु आप सभी आदानों और ऑपरेशन है, तो शेष भाग आपरेशन का परिणाम है पर। ऑपरेशन के रिसीवर को एक प्राथमिक मूल्य मिलेगा, या तो स्ट्रिंग या नंबर, और आप इसे रोक नहीं सकते हैं। यदि यह एक मनमाना रिसीवर नहीं है, तो उस वर्ग का एक उदाहरण कहें जिसे आपने ऑपरेटर ओवरलोड किया है, आप इनकमिंग वैल्यू/ओवरराइटिंग को रोकने के लिए विभिन्न गेट/सेट जाल को संभाल सकते हैं। आप कुछ केंद्रीय लुकअप में ऑपरेंड और ऑपरेशन को स्टोर कर सकते हैं और इसे उत्पन्न करने वाले ऑपरेशन के लिए एक आदिम मूल्य का पता लगाने के लिए एक सरल विधि का उपयोग कर सकते हैं, और फिर जो भी तर्क आप अपने कस्टम ऑपरेशन करना चाहते हैं उसे बनाएं। एक अन्य विधि जो मनमाने ढंग से रिसीवरों को अनुमति देगी जिसे बाद में जटिल रूपों में पुनर्निर्मित किया जा सकता है, डेटा को आदिम मूल्य में एन्कोड करने में होगा ताकि इसे आपकी जटिल कक्षा में वापस लाया जा सके। जैसे कि 3 अलग-अलग 8 बिट पूर्णांक (255,255,255) के आरजीबी मान को अंतराल पर एक ही संख्या में परिवर्तित किया जा सकता है और रिसीवर अंत इसे वापस अपने जटिल घटकों में परिवर्तित कर सकता है। या अधिक जटिल डेटा के लिए आप एक JSON क्रमबद्ध स्ट्रिंग भी वापस कर सकते हैं।
सद्भावना प्रॉक्सी (फ़ायरफ़ॉक्स 6 +, ध्वज के साथ नोडज) तक पहुंच होने से यह पूरी प्रक्रिया बेहद आसान हो जाती है, क्योंकि आप मूल रूप से सबकुछ पर फंसे हुए प्रॉक्सी बना सकते हैं और पूरी प्रक्रिया को अंत तक अंत तक आत्मनिर्भर कर सकते हैं और जो कुछ भी आप चाहते हैं उसे कर सकते हैं। 0/