मैंने सभी निर्मित वस्तुओं के लिए परिभाषा के रूप में प्रोटोटाइप में _data
संपत्ति सहेजी है।जावास्क्रिप्ट प्रोटोटाइप विरासत - साझा संपत्ति
function A() {}
A.prototype._data = [];
अब A
से बनाए गए सभी वस्तुओं संपत्ति _data
है।
मुझे प्रोटोटाइप विरासत चाहिए, जहां प्रोटोटाइप के _data
प्रोटोटाइप श्रृंखला में सभी प्रोटोटाइपों से _data
मान होंगे।
प्रत्यक्ष तरीके से नहीं पता, इस उदाहरण में मैं एक गेटर get()
का उपयोग करता हूं।
function A() {}
A.prototype._data = [];
A.prototype.add = function(rec) {
this.__proto__._data.push(rec);
}
A.prototype.get = function() {
if(typeof this.__proto__.constructor.prototype.get == 'function')
{
return this.__proto__.constructor.prototype.get().concat(this.__proto__._data);
}
else
{
return this.__proto__._data || [];
}
}
function B() {}
B.prototype = Object.create(A.prototype, { constructor: { value: B }});
B.prototype._data = [];
जब मैं मान aa
के साथ वस्तु a
बना सकते हैं और मूल्य bb
साथ b
वस्तु, b.get()
रिटर्न [aa, bb]
। और बाद में _data
प्रोटोटाइप A
aaaa
के साथ बढ़ाया जाएगा, फ़ंक्शन b.get()
[aa, aaaa, bb]
रिटर्न करेगा।
var a = new A(), b = new B();
a.add('aa');
b.add('bb');
console.log(b.get()); // [aa, bb]
a.add('aaaa');
console.log(b.get()); // [aa, aaaa, bb]
// EDITED - _data in A prototype shoud be without B
console.log(a.get()); // [aa, aaaa]
क्या यह एक अच्छा (मानक) तरीका है इसे कैसे प्राप्त किया जाए? मेरा मतलब है कि Object.create
और constructor.prototype
के साथ संदर्भ पैरेंट प्रोटोटाइप के दौरान कन्स्ट्रक्टर सुधार का उपयोग करना? इस सब के लिए http://jsfiddle.net/j9fKP/
कारण ORM पुस्तकालय है, जहां योजनाओं की विरासत की अनुमति दी है में इस योजना के लिए क्षेत्र परिभाषा है:
यहाँ एक डेमो है। बाल योजना में सभी योजनाएं मूल योजना से होनी चाहिए।
संभावित डुप्लिकेट [जावास्क्रिप्ट ऑब्जेक्ट सदस्यों जो सरणी के रूप में प्रोटोटाइप किए जाते हैं, सभी वर्ग उदाहरणों द्वारा साझा किए जाते हैं] (http://stackoverflow.com/questions/4425318/javascript-object-members-that-are-prototyped-as-arrays -बेक-साझा-द्वारा-सब-क्लै) – Bergi