2012-03-12 13 views
10

प्रकट करने में निजी चर का पर्दाफाश करें I मैं प्रकटीकरण मॉड्यूल पैटर्न को कार्यान्वित करने की कोशिश कर रहा हूं लेकिन मैं एक संशोधित निजी संपत्ति का पर्दाफाश करने में असमर्थ हूं।मॉड्यूल पैटर्न

var myRevealingModule = (function(){ 

    var name = 'Diogo'; 

    function setName() { 
     name = name + ' Cardoso'; 
    } 

    return { 
     fullName: name, 
     set: setName 
    }; 

}()); 

// Sample usage: 
myRevealingModule.set(); 
console.log(myRevealingModule.fullName); // "Diogo" instead of the excepted "Diogo Cardoso". 

उत्तर

20
return { 
    fullName: name, 
    set: setName 
}; 

मूल्यों name और setName की उपयोग करती है। यह चर के लिए संदर्भ नहीं बनाता है। प्रभावी रूप से, name कॉपी किया गया है।

बंद करने का लाभ उठाने के लिए आपको संबंधित getName विधि बनाने की आवश्यकता है ताकि आप एक चर के संदर्भ को रख सकें।

13
var myRevealingModule = (function(){ 

    var name = 'Diogo'; 

    function setName() { 
     name = name + ' Cardoso'; 
    }; 

    function getName() { 
     return name; 
    }; 

    return { 
     fullName: name, 
     set: setName, 
     get: getName 
    }; 

}()); 

http://jsfiddle.net/yeXMx/

0

यदि आपका मान किसी ऑब्जेक्ट या सरणी में एक विशेषता है, तो आप ऑब्जेक्ट या सरणी निर्यात कर सकते हैं और निर्यात संदर्भ के अनुसार होगा ताकि बाहरी उपयोगकर्ता अपडेट किए गए परिवर्तन देखेंगे। यह थोड़ा जोखिम भरा है क्योंकि निर्यात चर के सामान्य पैटर्न में स्केलर/ऑब्जेक्ट कॉपी/संदर्भ डिकोटॉमी है।

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

  • कोई संबंधित समस्या नहीं^_^