2012-03-09 20 views
5

में वैश्विक दायरे में वस्तुओं को सम्मिलित करना यह प्रश्न क्लासिक एएसपी में जावास्क्रिप्ट से संबंधित है। ब्राउज़र में चल रहे जावास्क्रिप्ट के साथ इसका कोई लेना-देना नहीं है।क्लासिक एएसपी/जावास्क्रिप्ट

(function(globalScope) { 
    ... declarations here... 
}(this)); 

यह अनुमति देता है कोड वाक्य रचना संक्षिप्त करने में, रन-टाइम पार्सर/संकलक द्वारा चेकों अनुमति देने के लिए:

एक जे एस मॉड्यूल है कि फिर से प्रयोग करने योग्य होने के लिए डिज़ाइन किया गया है के लिए एक विशिष्ट निर्माण इस तरह है । यह स्कोप प्रबंधन भी प्रदान करता है, ताकि curlies के भीतर घोषित वर्रों और कार्यों को बाहरी रूप से दिखाई नहीं देगा।

(function(globalScope) { 
    var data = ['Alpha', 'Beta', 'Gamma']; 

    function helper(a) { .... } 

    function search(d) { .... } 

    // "export" a function so it is externally visible 
    globalScope.searchData = search; 

}(this)); 

// typeof this.searchData == "function" 
// typeof this.data == "undefined" 
// typeof this.helper == "undefined" 
// typeof this.search == "undefined" 

यह सब बहुत विशिष्ट है:

एक और ठेठ निर्माण "निर्यात" एक वस्तु या भीतरी दायरे से संबंधित समारोह, बाहरी गुंजाइश के लिए, काम के माध्यम से, इस तरह के लिए है।

क्लासिक एएसपी (ध्यान: सर्वर-साइड जावास्क्रिप्ट !!) में इस तरह के निर्माण का उपयोग करते समय जेएस इंजन फेंकता है। मुझे 500 त्रुटि मिलती है।

क्यों?

क्या मैं क्लासिक एएसपी में वैश्विक दायरे में स्कोपिंग निर्माण और "निर्यात" चीजों का उपयोग कर सकता हूं?

ब्राउज़र रनटाइम में, "यह" "विंडो" का मूल्यांकन करता है। सर्वर-साइड क्लासिक एएसपी रनटाइम में, वैश्विक "यह" का मूल्य क्या है? क्या यह "गुण" को नए गुणों को असाइन करना संभव है?

उत्तर

2

मुझे यकीन नहीं है कि अंतर्निहित प्रकार क्या है लेकिन यह कुछ COM ऑब्जेक्ट होगा। जब तक यह COM ऑब्जेक्ट IDispatchEx लागू नहीं करता है, तब तक आप arbitary गुणों को असाइन करने में सक्षम नहीं होंगे। यह एमएसएचटीएम से COM ऑब्जेक्ट्स का मामला है जो इंटरनेट एक्सप्लोरर के डीएचटीएम कार्यान्वयन को कम करता है। हालांकि ऐसा लगता है कि एएसपी ने एक ही सुविधा प्रदान नहीं की है।

नहीं है एक काम के आसपास यह सोचते हैं कि पैरामीटर globalScope वास्तव में ही कभी वैश्विक विस्तार होने की उम्मीद है:

(function() { 
    var data = ['Alpha', 'Beta', 'Gamma']; 

    function helper(a) { .... } 

    function search(d) { .... } 

    // "export" a function so it is externally visible 
    searchData = search; 

})(); // Please not also small syntatic correction of your original code. 

चेतावनी इसके साथ ही संपत्ति searchData नहीं पहले से ही कहीं मौजूद होना चाहिए ऊपर दायरा श्रृंखला इस मामले में जेस्क्रिप्ट इसे वैश्विक स्तर पर बनाएगा।

नाम searchData सक्रिय स्क्रिप्ट में एक नामित आइटम बन जाता है (अर्थात भी एक ही पृष्ठ है कि VBScript भी searchData देख सकते हैं में कुछ VBScript शामिल करने के लिए यदि आप थे)। इसके अलावा this.searchData अब असाइन किया गया है। ऐसा लगता है कि जो भी वैश्विक वस्तु है, वह सक्रिय स्क्रिप्ट ऑब्जेक्ट पर नामित वस्तुओं पर मैप किए जाने के लिए सदस्य नामों के देर से संकल्प की अनुमति देता है।

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