2012-06-25 12 views
9

जावास्क्रिप्ट में एक फ़ंक्शन एक संलग्न (छुपा) लिंक को अपने संलग्न दायरे में रखकर बंद कर देता है।क्या किसी फ़ंक्शन को बंद करने के लिए पहुंच प्राप्त करना संभव है?

यह प्रोग्राम के रूप में इसे उपयोग करने में जब हम कार्य हो (एक चर मूल्य के रूप में) संभव है?

वास्तविक लक्ष्य सैद्धांतिक है, लेकिन एक प्रदर्शन बंद करने के गुणों को सूचीबद्ध करने के हो सकता है।

var x = (function(){ 
    var y = 5; 
    return function() { 
     alert(y); 
    }; 
})(); 

//access y here with x somehow 
+0

कोड का नमूना बेहतर अपने सटीक समस्या – Blaster

+0

की व्याख्या करता है समस्या सैद्धांतिक, व्यावहारिक है नहीं: एक समारोह को देखते हुए, आप अपनी अंतिम के गुणों की गणना कर सकते हैं? –

+0

'console.log (x()। Y); // 5'? – Blaster

उत्तर

4

यह जानकारी (निजी) को बंद रखने के उद्देश्य (बंद) का उद्देश्य है। चूंकि फ़ंक्शन को पहले ही निष्पादित कर दिया गया है, इसके दायरे चर अब बाहर से उपलब्ध नहीं हैं (और कभी नहीं रहे हैं) - केवल इसके दायरे में निष्पादित फ़ंक्शंस (अभी भी) तक पहुंच है।

हालांकि आप गेटर्स/सेटर्स के माध्यम से पहुंच प्रदान कर सकते हैं।

आप बंद के बारे में Stuart Langridge's talk में एक बार देख ले सकते हैं। डगलस क्रॉकफोर्ड स्पष्टीकरण भी बहुत अनुशंसित हैं। आप बंद के साथ फैंसी सामान की बहुत सारी कर सकते हैं;)

संपादित करें: आपके पास कई विकल्प बंद की जांच करने के लिए है: देखो webdeveloper कंसोल में वस्तु या (के रूप में मैं इसे अक्सर करते हैं) एक डिबग-समारोह जो बाहर उदासीनता वापसी कंसोल के लिए सभी निजी चर।

3

नहीं, जब तक आप इसे बेनकाब:

var x = function(){ 
     var y = 5; 

     return {    
      getY: function(){ 
       return y; 
      }, 
      setY: function(newY){ 
      y = newY; 
      }  
     } 
    } 


    x.setY(4); 
2

आप चेतावनी समारोह संपादित कर सकते हैं:

var x = (function(){ 
    var y = 5; 
    return function() { 
     alert(y); 
    }; 
})(); 

var oldAlert = alert; 

alert = function (x) { 
    oldAlert(x); 
    window.y = x; 
} 

x(); 

console.log(y); // 5 

या यदि आप कोड के मालिक हैं, तो आप standart getters और setters उपयोग कर सकते हैं।

+6

हे, बॉक्स के बाहर सोचने के लिए + 1। मुझे लगता है कि ओपी बंद होने में सभी चर का निरीक्षण करने में सक्षम होना चाहता है। – Matt

+0

मैं बस बिंदु बनाना चाहता हूं, कि बंद पूरी तरह से काले बॉक्स नहीं हैं। – jasssonpet

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

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