कोई संरक्षित चर/जावास्क्रिप्ट में गुण हैं। हालांकि, जब आप विरासत कक्षाओं को उसी दायरे में घोषित करते हैं, तो आप "निजी" चर का पुन: उपयोग कर सकते हैं, जो आपके मामले में संभव लगता है जब निजी चर आपके प्रोटोटाइप की केवल "छिपी हुई सुविधाएं" हैं।
MyNamespace.Person = function Person(params) {
// private variables and functions, individual for each Person instance
var anything, id;
function execute_something() {}
// public properties:
this.name = "";
this.getId = function getId(){
// called a "privileged function", because it has access to private variables
}
}
MyNamespace.American = function(params) {
MyNamespace.Person.call(this, params); // inherit name and getId()
}
(function() { // new scope for
// hidden utility functions and other private things
function foo() { }
function helpJSON() { }
function fromJSON() { }
var bar;
(function(personProto) { // new scope for prototype module (not explicitly needed)
// "private" /static/ variables (and functions, if you want them private)
var personCount = 0;
personProto.clone = function clone() {
return this.constructor(myself); // or something
};
personProto.toJSON = function toJSON() {
// use of helpJSON()
};
personProto.fromJSON = fromJSON; // direct use
})(MyNamespace.Person.prototype);
(function(amiProto) {
// just the same as above, if needed
amiProto.special = function() {
// use foo() and co
};
})(MyNamespace.American.prototype = Object.create(MyNamespace.Person.prototype));
})();
इस विरासत का जावास्क्रिप्ट तरीका है, जिसका अर्थ अमेरिकी प्रोटोटाइप व्यक्ति के प्रोटोटाइप से पूर्ण रूप से अपने क्लोन(), toJSON() और fromJSON() फ़ंक्शन विरासत है। बेशक ओवरराइट योग्य। और फीचर,
new MyNamespace.American() instanceof MyNamespace.Person; // true
बेशक
है अगर आपको लगता है कि जरूरत नहीं है, और अधिक मॉड्यूल की तरह जिस तरह से उपयोग करते हैं, आप उपयोगिता कार्यों का पुन: उपयोग कर सकता है चाहता हूँ, यानी सिर्फ उन्हें कॉपी:
(function() {
// hidden utility functions and other private things
var bar;
var personCount;
function foo() { }
function helpJSON() { }
function fromJSON() { }
function clone() {
return this.constructor(myself); // or something
}
function toJSON() { }
(function(personProto) { // new scope, not really needed
// private variables are useless in here
personProto.clone = clone;
personProto.toJSON = toJSON;
personProto.fromJSON = fromJSON;
})(MyNamespace.Person.prototype);
(function(amiProto) { // new scope, not really needed
// copied from personProto
amiProto.clone = clone;
amiProto.toJSON = toJSON;
amiProto.fromJSON = fromJSON;
// and now the differences
amiProto.special = function() {
// use foo() and co
};
})(MyNamespace.American.prototype);
})();
यदि आप विरासत और प्रोटोटाइप पर अधिक जानकारी प्राप्त करना चाहते हैं तो यहां एक महान पढ़ा गया है: http://killdream.github.com/blog/2011/10/understanding-javascript-oop/index.html मुझे लगता है कि आप जा सकते हैं बिंदु 3 जहां विरासत शुरू होती है। –
दुर्भाग्यवश यह लिंक अब 404 त्रुटि देता है। –
@Programmer_D: यह http://robotlolita.me/2011/10/09/understanding-javascript-oop.html पर ले जाया गया है। और निश्चित रूप से आप [पुराने संस्करण को देख सकते हैं] (http://web.archive.org/web/20130127102509/http://killdream.github.com/blog/2011/10/understanding-javascript-oop/index .html) – Bergi