जब किसी फ़ंक्शन को किसी कन्स्ट्रक्टर में परिभाषित किया जाता है, तो उस फ़ंक्शन का एक नया उदाहरण प्रत्येक बार कन्स्ट्रक्टर कहलाता है। इसमें निजी चर तक पहुंच भी है।
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
@हरोन: बस मामले में: ['''] के उपयोग के लिए सावधान रहें (http://blog.niftysnippets.org/2008/04/you-must-remember -this.html)। –
मैंने सार्वजनिक, निजी और विशेषाधिकार प्राप्त अधिक स्पष्ट के बीच अंतर बनाने के लिए अपना उत्तर अपडेट किया। – Greg