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 stileOriginariamente inviato da antotan
Sì, capisco il punto di vista su entrambe le questioni...tornando al problema iniziale, ho una curiosità: cosa ti da fastidio nell'usare una sintassi più jquery-like on obj.literal e cicli?
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.Originariamente inviato da antotan
Per il consumo della memoria nell'istanziare i literal non credo ci siano grossi problemi, per il genere di lavoro a cui punti la loro dimensione è relativamente piccola. Inoltre spesso c'è la necessità di utilizzare oggetti già pronti (ad esempio se ti vengono spediti dal server in notazione JSON, ma immagino ci siano moltri altri casi).
In tal caso dovrei ciclare io sviluppatore sul mio oggetto per effettuare n chiamate alla function.
Questo vorrebbe anche dire creare ogni volta l'ambiente locale e fare degli accessi in memoria n volte (ed esempio, con il ciclo accedo una volta a nodi.length, nella tua implementazione ci accedo n volte).
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).
Che intendi per "espressività"?Originariamente inviato da antotan
Per quanto riguarda le "tempistiche" ho preparato un test su
jsperf giusto per dare un'occhiata generica (scusa se ci sono errori, ho fatto un pò al volo). Nel mio caso ho usato un while che dovrebbe dare un minimo di vantaggio, il tuo codice non l'ho toccato invece.
Pare che le due soluzioni siano paragonabili. Quella tipo jQuery è più veloce su IE però, un dettaglio interessante.
Inoltre l'espressività della seconda soluzione mi pare migliore (ma questo è solo un parere personale).
Carina l'idea della comparazioneOriginariamente inviato da antotan
Ciò non toglie che il tuo codice abbia un certo stile e appeal, mi piace molto l'idea di ritornare la function ad ogni passo di calcolo.
Fammi sapere cosa ne pensi.
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.![]()


Rispondi quotando