मैं slice()
का उपयोग कर ऑब्जेक्ट्स की एक सरणी क्लोन कर रहा हूं लेकिन जब मैं उस क्लोन सरणी को किसी अन्य विधि में पास करता हूं तो सरणी की सामग्री उनके संदर्भ खो रही है और undefined
बन जाती है।कॉफ़ीस्क्रिप्ट/जावास्क्रिप्ट क्यों, एक क्लोन सरणी में ऑब्जेक्ट्स किसी विधि को पारित होने पर उनके संदर्भ खोने लगते हैं?
class Chooser
constructor: (@order, @items) ->
# do stuff
choose: ->
console.debug "Choosing", @order.size, "from", @items.slice()
@process(@order.size, @items.slice())
# do stuff
process: (count, items) ->
console.debug "count", count
console.debug "items", items
console.debug "@items", @items
# do recursive stuff that includes an items.shift()
पहले console.debug
मुझे देता है, के रूप में उम्मीद:
Choosing 10 items from [Item, Item]
जहां Item
और Item
मैं वास्तव में क्या उम्मीद कर रहे हैं।
लेकिन फिर अगले console.debug
लाइनों मुझे दे
count 10
items [undefined x 2]
@items [Item, Item]
मैं समझता हूँ कि @items.slice()
@items
के उथले कॉपी बन जाती है, और जैसा कि सरणी के भीतर इस तरह की वस्तुओं में एक ही Item
वस्तुओं के लिए संदर्भ। Item
ऑब्जेक्ट्स अभी भी मौजूद हैं क्योंकि वे अभी भी मूल @items
सरणी में हैं।
क्यों, क्लोन सरणी में ऑब्जेक्ट्स process
विधि के भीतर एक बार अपने संदर्भ खोने लगते हैं?
देखें इस Working example of the problem converted to Javascript
jsfiddle, jsbin, codepen, requirebin या कि और फिर जैसे कुछ पर चल रहे एक उदाहरण के लिए एक लिंक पोस्ट करें हमें बताएं कि आप क्या देखते हैं और इसके बजाय आप क्या उम्मीद करते हैं। यह किसी समस्या को डीबग करने के लिए बहुत अधिक समझ में नहीं आता है जो आप कहते हैं लेकिन टिप्पणियों में अन्य कहते हैं कि यह नहीं है। – rsp
मैंने त्रुटि को पुन: उत्पन्न करने में कामयाब रहा है लेकिन एक समझदार यूआरएल उत्पन्न करने के लिए कॉफी स्क्रिप्ट साइट नहीं मिल सका। देखें [यह jsfiddle] (http://jsfiddle.net/k0quf8v2/) हालांकि कॉफी स्क्रिप्ट से जावास्क्रिप्ट में परिवर्तित किया गया है। यह त्रुटि को पुन: उत्पन्न करता है। –
@ डेवसैग: मैं सुझाव देता हूं कि प्रासंगिक कोड को फिसल ** से ** प्रश्न में कॉपी करें, क्योंकि कोड में सरणी से प्रविष्टियों को हटाने में थोड़ा सा हिस्सा नहीं है, जो बाद में कंसोल के साथ समस्या का कारण बनता है। यह सुनिश्चित करता है कि भविष्य में लोगों के लिए प्रश्न उपयोगी रहें, क्योंकि बाहरी लिंक सड़ांध होते हैं, और एसओ अनिवार्य रूप से स्वयं निहित होने के लिए है। –