दिलचस्प पोस्ट
सी # में कॉओरिएंट और कॉन्ट्राएरिएन्ट इंटरफेस को समझना मोबाइल रीडायरेक्ट htaccess का उपयोग कर फेसबुक के लिए XMPP चैट क्लाइंट कैसे बनाएं? रिलेशनल डीबी में एक पेड़ की संरचना को स्टोर करने के लिए जाने वाले तरीके क्या हैं? कैसे PHP virus फ़ाइलों की तरह eval-base64_decode से छुटकारा पाने के लिए? मैं लिनक्स में खुली फाइल की सीमा की संख्या कैसे बदलूं? ओपनसीवी में काम नहीं कर रहा है अलग-अलग गीटम भंडार में उप-डायरेक्टरी को अलग करें (चाल) pthread सिंक्रनाइज़ ब्लॉकिंग कतार जावा: क्लास.इस कमांड लाइन से VBScript का उपयोग कर Excel से बाहर Excel मैक्रो चलाएं बूटस्ट्रैप 3 ग्लाइफिकॉन सीडीएन जेसन स्ट्रिंग को स्पार्क पर डेटाफ्रेम में परिवर्तित करने के तरीके पायथन यूनिकोड एन्कोड त्रुटि v ++ के लिए अपरिभाषित संदर्भ c ++

एक जावास्क्रिप्ट ऑब्जेक्ट स्वयं के मानों को कैसे संदर्भित कर सकता है?

कहें कि मेरे पास निम्न जावास्क्रिप्ट है:

var obj = { key1 : "it ", key2 : key1 + " works!" }; alert(obj.key2); 

"कुंजी 1 परिभाषित नहीं है" के साथ ये त्रुटियां मैं प्रयास कर चुका हूं

 this.key1 this[key1] obj.key1 obj[key1] this["key1"] obj["key1"] 

और वे कभी भी परिभाषित नहीं होते हैं

Key1 के मूल्य का संदर्भ देने के लिए मैं कैसे 2 कुंजी प्राप्त कर सकता हूं?

Solutions Collecting From Web of "एक जावास्क्रिप्ट ऑब्जेक्ट स्वयं के मानों को कैसे संदर्भित कर सकता है?"

शायद आप किसी फ़ंक्शन में विशेषता को निकालने के बारे में सोच सकते हैं। मेरा मतलब कुछ ऐसा है:

 var obj = { key1 : "it ", key2 : function() {return this.key1 + " works!";} }; alert(obj.key2()); 

यह शाब्दिक के बजाय कंस्ट्रक्टर फ़ंक्शन का उपयोग करके प्राप्त किया जा सकता है

 var o = new function() { this.foo = "it"; this.bar = this.foo + " works" } alert(o.bar) 

आप उस ऑब्जेक्ट को प्रारंभ करने से पहले ऑब्जेक्ट की एक संपत्ति का उल्लेख नहीं कर सकते; एक बाहरी चर का उपयोग करें

 var key1 = "it"; var obj = { key1 : key1, key2 : key1 + " works!" }; 

इसके अलावा, यह "JSON ऑब्जेक्ट" नहीं है; यह एक जावास्क्रिप्ट ऑब्जेक्ट है JSON स्ट्रिंग के साथ एक ऑब्जेक्ट का प्रतिनिधित्व करने की एक विधि है (जो मान्य जावास्क्रिप्ट कोड होता है)।

क्योंकि obj परिभाषित बयान समाप्त नहीं हुआ है, key1 अभी तक मौजूद नहीं है। इस समाधान पर विचार करें:

 var obj = { key1: "it" }; obj.key2 = obj.key1 + ' ' + 'works!'; // obj.key2 is now 'it works!' 

एक विकल्प एक गेटर / सेटर विधियों का उपयोग करना होगा।

उदाहरण के लिए, यदि आप केवल गणना मूल्य को पढ़ने की परवाह करते हैं:

 var book = {} Object.defineProperties(book,{ key1: { value: "it", enumerable: true }, key2: { enumerable: true, get: function(){ return this.key1 + " works!"; } } }); console.log(book.key2); //prints "it works!" 

उपरोक्त कोड, हालांकि, आपको कुंजी 2 के लिए दूसरे मान को परिभाषित नहीं करने देगा।

इसलिए, चीजें थोड़ी अधिक जटिल हो जाती हैं यदि आप कुंजी 2 के मूल्य को फिर से परिभाषित करना चाहें। यह हमेशा एक गणना मूल्य होगा सबसे अधिक संभावना है कि आप क्या चाहते हैं

हालांकि, यदि आप कुंजी 2 के मूल्य को फिर से परिभाषित करने में सक्षम होना चाहते हैं, तो आपको गणना की स्वतंत्र रूप से अपनी मूल्य कैश करने के लिए जगह की आवश्यकता होगी।

कुछ हद तक इस तरह:

 var book = { _key2: " works!" } Object.defineProperties(book,{ key1: { value: "it", enumerable: true}, _key2: { enumerable: false}, key2: { enumerable: true, get: function(){ return this.key1 + this._key2; }, set: function(newValue){ this._key2 = newValue; } } }); console.log(book.key2); //it works! book.key2 = " doesn't work!"; console.log(book.key2); //it doesn't work! for(var key in book){ //prints both key1 and key2, but not _key2 console.log(key + ":" + book[key]); } 

एक और दिलचस्प विकल्प स्वयं-प्रारंभिक वस्तु का उपयोग करना है:

 var obj = ({ x: "it", init: function(){ this.y = this.x + " works!"; return this; } }).init(); console.log(obj.y); //it works! 

यह एक JSON ऑब्जेक्ट नहीं है, यह ऑब्जेक्ट आर्टिकल नोटेशन के माध्यम से बनाई गई एक जावास्क्रिप्ट ऑब्जेक्ट है। (JSON डेटा एक्सचेंज (अधिक) के लिए एक पाठ अंकन है । यदि आप जावास्क्रिप्ट स्रोत कोड से निपटते हैं, और स्ट्रिंग के साथ काम नहीं कर रहे हैं, तो आप JSON के साथ काम नहीं कर रहे हैं।)

ऑब्जेक्ट इनिलाइज़र के भीतर कोई रास्ता नहीं है जिसका प्रारंभिक रूप से शुरू किया गया ऑब्जेक्ट है, क्योंकि प्रारंभकर्ता को समाप्त होने तक बनाए गए ऑब्जेक्ट के संदर्भ में कोई रास्ता नहीं है। (इस स्थिति के लिए कोई भी ऐसा कीवर्ड नहीं है या कुछ और है।)

आप इसके बदले फ़ंक्शन के अंदर होने के बजाय आप obj संदर्भ भी कर सकते हैं।

 var obj = { key1: "it", key2: function(){return obj.key1 + " works!"} }; alert(obj.key2()); 

यह JSON नहीं है JSON सरल बनाया गया था; मनमानी अभिव्यक्ति की अनुमति सरल नहीं है

पूर्ण जावास्क्रिप्ट में, मुझे नहीं लगता कि आप यह सीधे कर सकते हैं। जब तक obj नामक ऑब्जेक्ट पूरी तरह से निर्मित नहीं हो जाता तब तक आप इसका उल्लेख नहीं कर सकते। तो आपको एक वैकल्पिक हल की आवश्यकता है, जो कि अधिक JavaScript-fu वाला कोई भी मैं प्रदान करेगा।