मैं जावास्क्रिप्ट शब्दकोश कार्यान्वयन के बारे में कुछ सवाल और जवाब को पढ़ने के रूप में वस्तुओं लेता है, लेकिन वे मेरी आवश्यकताओं को पूरा नहीं करते हैं:वैकल्पिक हल: जावास्क्रिप्ट शब्दकोश जो कुंजी
- शब्दकोश कुंजी के रूप में वस्तुओं लेने के लिए सक्षम होना चाहिए
- मूल्यों से सुलभ होनी चाहिए [] -operator
तो मैं विचार Object.prototype में "valueOf" -method अधिलेखित करने के साथ आया था, इस प्रकार है:
Object.__id__ = 0;
Object.prototype.valueOf = function() {
if(!this.__id__)
this.__id__ = ++Object.__id__;
return "__id__" + this.__id__;
}
Object.prototype.toString = Object.prototype.valueOf;
//test
var x = {p1: "5"};
var y = [6];
var z = {};
z[x] = "7";
z[y] = "8";
console.log(z[x], z[y]);
मैंने Google क्रोम के साथ इसका परीक्षण किया और यह अच्छी तरह से काम करता प्रतीत होता है, लेकिन मैं थोड़ा सा संदेह कर रहा हूं, चाहे इससे कुछ कमियां हो जाएंगी, क्योंकि इसे कार्यान्वित करना इतना आसान था।
यह मानते हुए कि पूरे कोड में अन्य उद्देश्यों के लिए valueOf विधि का उपयोग नहीं किया जाता है, क्या आपको लगता है कि कोई नुकसान है?
मैंने हमेशा आपकी लाइब्रेरी का उपयोग पहले किया था और यह अच्छी तरह से काम करता है। लेकिन वर्तमान में मैं जावास्क्रिप्ट कनवर्टर के लिए एक्शनस्क्रिप्ट 3 पर काम कर रहा हूं। एएस 3 एक शब्दकोश प्रदान करता है। अगर मैं आपकी लाइब्रेरी का उपयोग करता हूं, तो मुझे प्रकारों को जांचने और सेट/सेट के साथ ब्रैकेट को प्रतिस्थापित करने की आवश्यकता होगी। ValueOf में प्रकट नहीं होता है ... यदि मैं ऑब्जेक्ट का उपयोग करता हूं, लेकिन ऐसा लगता है कि अगर मैं एक नया "वर्ग" परिभाषित करता हूं। (शायद यह अन्य ब्राउज़रों में अलग-अलग व्यवहार करता है)। चूंकि मैं ऑब्जेक्ट.प्रोटोटाइप.वल्यू को ओवरराइट करना पसंद नहीं करता हूं, स्वयं ही आपने मेरे प्रश्न का उत्तर दिया – fishbone