2010-06-18 12 views
5

मैं जावास्क्रिप्ट सीख रहा हूं, और मुझे समझ में नहीं आ रहा है कि आप उन तरीकों को क्यों बनाते हैं जो 'विशेषाधिकार' नहीं हैं, यानी, जो कि कन्स्ट्रक्टर में परिभाषित नहीं हैं बल्कि कक्षा के प्रोटोटाइप में परिभाषित हैं।गैर-विशेषाधिकार प्राप्त विधियां क्यों बनाते हैं?

मैं encapsulation और सभी के विचार को समझता हूं, लेकिन आप ओओ दुनिया में अधिकांश हिस्सों से किसी वर्ग के हिस्सों को कभी भी समाहित नहीं करते हैं।

उत्तर

18

जब किसी फ़ंक्शन को किसी कन्स्ट्रक्टर में परिभाषित किया जाता है, तो उस फ़ंक्शन का एक नया उदाहरण प्रत्येक बार कन्स्ट्रक्टर कहलाता है। इसमें निजी चर तक पहुंच भी है।

var myClass = function() { 
    // private variable 
    var mySecret = Math.random(); 

    // public member 
    this.name = "Fred"; 

    // privileged function (created each time) 
    this.sayHello = function() { 
     return 'Hello my name is ' + this.name; 
     // function also has access to mySecret variable 
    }; 
} 

एक समारोह प्रोटोटाइप पर परिभाषित किया जाता है, समारोह केवल एक बार बनाई गई है और कहा कि समारोह की एक उदाहरण साझा किया जाता है।

var myClass = function() { 
    // private variable 
    var mySecret = Math.random(); 

    // public member 
    this.name = "Fred"; 
} 

// public function (created once) 
myClass.prototype.sayHello = function() { 
    return 'Hello my name is ' + this.name; 
    // function has NO access to mySecret variable 
}; 

तो प्रोटोटाइप पर एक फ़ंक्शन को परिभाषित करने से कम ऑब्जेक्ट उत्पन्न होते हैं जो आपको बेहतर प्रदर्शन दे सकते हैं। दूसरी तरफ, सार्वजनिक तरीकों के पास निजी चर तक पहुंच नहीं है। आगे के उदाहरण और तर्क यहां उपलब्ध हैं: http://www.crockford.com/javascript/private.html

+0

@हरोन: बस मामले में: ['''] के उपयोग के लिए सावधान रहें (http://blog.niftysnippets.org/2008/04/you-must-remember -this.html)। –

+0

मैंने सार्वजनिक, निजी और विशेषाधिकार प्राप्त अधिक स्पष्ट के बीच अंतर बनाने के लिए अपना उत्तर अपडेट किया। – Greg

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