Sto clonando una matrice di oggetti usando slice()
ma quando passo quell'array clonato in un altro metodo i contenuti dell'array perdono i loro riferimenti e diventano undefined
.Coffeescript/Javascript Perché, gli oggetti in una matrice clonata sembrano perdere i loro riferimenti quando vengono passati a un metodo?
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()
Il primo console.debug
mi dà, come ci si aspettava:
Choosing 10 items from [Item, Item]
dove Item
e Item
sono esattamente quello che mi aspettavo.
Ma poi i prossimi console.debug
linee mi danno
count 10
items [undefined x 2]
@items [Item, Item]
Capisco che @items.slice()
crea una copia superficiale di @items
, e come tale gli oggetti all'interno della matrice sono riferimenti agli stessi oggetti Item
. Gli oggetti Item
ovviamente esistono ancora in quanto sono ancora nell'array @items
originale.
Perché, gli oggetti nell'array clonato sembrano perdere i loro riferimenti una volta all'interno del metodo process
?
Vai a questa Working example of the problem converted to Javascript
Si prega di inviare un link ad un esempio in esecuzione su jsfiddle, jsbin, codepen, requirebin o qualcosa del genere e poi dicci cosa vedi e cosa ti aspetti invece. Non ha molto senso eseguire il debug di un problema che dici esiste ma altri nei commenti dicono che non lo è. – rsp
Sono riuscito a riprodurre l'errore ma non sono riuscito a ottenere il sito di script per il caffè per generare un URL ragionevole. vedi [questo jsfiddle] (http://jsfiddle.net/k0quf8v2/) comunque che viene convertito in javascript dal copione del caffè. Riproduce l'errore. –
@DaveSag: Suggerisco di copiare il codice pertinente dal violino ** nella ** domanda, poiché il codice non ha il bit che rimuove le voci dall'array, il che causa il problema con la console in un secondo momento. Questo assicura che le domande rimangano utili per le persone in futuro, poiché i link esterni marciscono e SO è pensato per essere essenzialmente autosufficiente. –