मान लीजिए मैं एक वर्ग A
मेरी जेटपैक आधारित पुस्तकालय में (यानी हम क्रोम/एक्सटेंशन कोड के बारे में बात कर रहे हैं) लिख रहा हूँ:कमजोर संदर्भ
function A() {
//constructor
}
A.prototype = {
//class members
};
उपयोगकर्ता द्वारा बनाया जाने वाला वर्ग A
का उदाहरण:
var a = new A();
अब लगता है मुझे A
के सभी उदाहरणों बनाए गए का ट्रैक रखने के लिए चाहते हैं, मैं कर सकता:
var listA = [];
और A
के निर्माता में listA.push(this);
जोड़ने के लिए, के साथ समाप्त:
var listA = [];
function A() {
// constructor
listA.push(this);
}
A.prototype = {
// class members
};
सब ठीक है जब तक a
के उपयोगकर्ता अपने संदर्भ चला जाता है (उदाहरण के लिए a
गुंजाइश से बाहर चला जाता है)। अब मुझे एक समस्या है: listA
में अभी भी a
का संदर्भ है, इसलिए यह कभी भी कचरा एकत्र नहीं किया जाएगा। इसके अलावा मेरे पास listA
A
के उदाहरणों को फ़िल्टर करने का कोई तरीका नहीं है जो अन्यथा पहुंच योग्य नहीं हैं। मैं प्रभावी रूप से स्मृति लीक कर रहा हूँ।
मुझे जो चाहिए वह नियमित रूप से listA
कमजोर संदर्भों को धक्का देना है। मुझे लगता है कि इसे किसी भी तरह से करना संभव है, लेकिन मुझे नहीं पता कि यहां से कहां जाना है। मैं की तरह कुछ कल्पना कर सकते हैं:
var weak_a = new weakRef(a);
assert(weak_a.ref === a);
लेकिन तब मुझे पता नहीं, उदाहरण के लिए, यदि एक कमजोर संदर्भ अभी भी मान्य है कैसे परीक्षण करने के लिए। या listA
में मृत कमजोर प्रविष्टियों को कुशलतापूर्वक फ़िल्टर करने के तरीके को कैसे फ़िल्टर करें। कोई सुझाव?
तो ... listA एक सदस्य है? –
नहीं। मैंने सवाल संपादित किया, उम्मीद है कि अब यह स्पष्ट है। – CAFxX