Forse mi sfugge qualcosa, ma quegli oggetti vengono "spazzolati" appena passa il gc, se non hanno più riferimenti.Originariamente inviato da carlomarx
Niente, è solo che... perché devo creare un oggetto ogni volta (tra l'altro consumando anche qualche carattere in più) se posso evitare? Calcola anche che un oggetto una volta creato non viene più eliminato, resta freezato nella memoria ram. È una questione di stile![]()
Si, ovvio. Però è un pò riduttivo come scenario, spesso ne setti più di una come proprietà. Poi ovviamente è dura dire chi fa prima tra il for-in e le n gestioni del call-stack+accessi.Nulla vieta la creazione di un nuovo metodo chiamato, che so, attributesFromObj(), che funzioni jQuery-like solo ed esclusivamente per quei casi in cui ti trovi a lavorare con oggetti già pronti. Ma nella stragrande maggioranza dei casi ti trovi a dover lavorare con proprietà da settare manualmente. E a quel punto creare oggetti in più è perfettamente inutile.
Su nodi.length hai ragione... ma è anche vero che se non sbaglio i cicli con l'operatore "in" sono più dispendiosi (prova tu stesso: crea un array con x elementi e fai partire un ciclo su di esso prima nel modo tradizionale e poi con l'operatore in).
Intendevo "si legge meglio". Ripeto, è solo un parere personale.Che intendi per "espressività"?
tutto chiaro, non ho più curiosità alloraCarina l'idea della comparazione
Il punto principale di quel codice è il fatto che ogni metodo dell'oggetto x ti restituisce l'oggetto x stesso, dimodoché puoi evitare di citarlo ogni volta: oggettoX.faiQualcosa().faiQualcosaltro().etc().etc ().
Che poi l'oggetto x sia anche eseguibile è un dettaglio in più, che ti permette di non dover ripetere ogni volta l'ultima azione eseguita: oggettoX.faiQualcosa()()().faiQualcosaltro().etc() ()()().etc().
Come ti ho già accennato, è un modo per abbreviare il codice scritto a mano. Che poi sia leggerissimamente anche più performante è una cosa che non guasta... Ma se avessi a che fare con oggetti già pronti che descrivessero le proprietà da assegnare stai sicuro che creerei un altro metodo ad hoc jQuery-like.![]()
![]()