2011-01-31 11 views
20

मान लीजिए कि हमें कुछ इस तरह करते हैं (एक जावास्क्रिप्ट वस्तु के निर्माण के हिस्से के रूप):जावास्क्रिप्ट में बाध्य बंद चर का निरीक्षण कैसे करें?

var foo = 3; 
this.method = function() { alert(foo); }; 

अब एक बंद यकीन है कि foo बनाए रखा है और method में उपयोग के लिए उपलब्ध बनाने के लिए उत्पन्न हो जाएगा। वर्तमान बंद होने पर आत्मनिरीक्षण करने का कोई तरीका है?

क्या मैं के लिए देख रहा हूँ सभी चर कि method के अंदर उपलब्ध हैं, जो foo को शामिल करना चाहिए की गणना करने में एक तरीका है। इस तरह डीबग कोड बंद होने के बाध्यकारी को डीबग करने में बहुत मदद करेगा, लेकिन मुझे अभी तक यह नहीं मिला है। क्या इसे करना संभव है?

उत्तर

10

भाषा में ऐसी कोई संभावना नहीं है। वास्तव में, जावास्क्रिप्ट क्लोजर में छिपा हुआ डेटा उन कुछ चीजों में से एक है जो वास्तव में वास्तव में निजी हैं (सी #, सी ++, जावा इत्यादि में "निजी" डेटा के विपरीत, जिसे हमेशा पॉइंटर जादू या प्रतिबिंब के साथ उपयोग किया जा सकता है)।

संक्षेप में, यह एक कंपाइलर-स्तर की बात होगी। आप जो उम्मीद कर सकते हैं वह एक प्रमुख जावास्क्रिप्ट-दुभाषिया (या कोर इंजन में ऐसे उपकरण को प्लग करने के लिए कम से कम अंतर्निहित क्षमता) में निर्मित एक उपकरण है। फ़ायरफ़ॉक्स/फ़ायरबग या वी 8/नोड.जेएस में से एक अच्छा होगा, लेकिन मेरा मानना ​​है कि इस समय हम भाग्य से बाहर हैं। this.method.%foo:

7

1.11.2 के बाद से, Firebug के कमांड लाइन foo का मूल्य प्राप्त करने के लिए एक वाक्य रचना विस्तार भी शामिल है।

डीओएम पैनल में "दिखाएं बंद करें" विकल्प को चालू करके और this.method की छद्म-संपत्ति "(बंद)" का विस्तार करके पूरे बंद होने का भी निरीक्षण किया जा सकता है। यह क्रोम में भी काम करता है (वहां छद्म-संपत्ति को <function scope> कहा जाता है; इसके लिए कोई प्रीफ़ नहीं है)।

0

शायद जावास्क्रिप्ट इसे डिफ़ॉल्ट रूप से कार्यान्वित नहीं करता है लेकिन मैं वैश्विक वस्तु से सभी गुणों को पढ़ने का एक तरीका कल्पना कर सकता हूं (जैसे foo इसकी संपत्ति है) और बंद होने तक प्रत्येक संपत्ति को पढ़ा जाता है, हालांकि यह वास्तव में धीमा होगा । मुझे कहना होगा कि मुझे जावास्क्रिप्ट के बारे में ज्यादा जानकारी नहीं है और शायद मैं सिर्फ गैरकानूनी कह रहा हूं, लेकिन हो सकता है कि आपको मेरे दृष्टिकोण से एक नया विचार मिल जाए।

+1

यदि 'foo' एक स्थानीय चर है (शायद ओपी का उदाहरण सभी एक कन्स्ट्रक्टर के अंदर है), तो यह वैश्विक वस्तु से पहुंच योग्य नहीं होगा। – dpercy

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