Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni
Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni
Redmi Pad 2 9.7 punta su un display ampio e fluido, una batteria capace di accompagnare l'uso quotidiano senza ansie da ricarica e un prezzo accessibile, a partire da 179,90 euro per la versione con 64 GB di storage. Lo Snapdragon 6s 4G Gen 2 e i 4 GB di RAM della configurazione più diffusa frenano però chi cerca reattività e multitasking spinto: ecco il bilancio dopo due settimane di prova diretta
Peugeot Polygon Concept: ecco il futuro delle utilitarie
Peugeot Polygon Concept: ecco il futuro delle utilitarie
Polygon è la concept car di Peugeot che mostra il futuro delle soluzioni del segmento B: tra design compatti e innovativi affiancati da dimensioni compatte uno scherzo dalla manovrabilità incredibile per le manovre a bassa velocità
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione
OPPO ha portato in Italia, dal 1° luglio 2026, Reno16 Pro: display AMOLED da 6,32 pollici a 144Hz, tripla fotocamera con sensore principale da 200 megapixel, chip Dimensity 8550 Super e batteria da 6000mAh, al prezzo di lancio di 899 euro. Lo abbiamo provato per due settimane insieme al nuovo accessorio Bubble, per capire se la formula compatta della serie regge ancora di fronte a un listino da 1099 euro
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-09-2010, 16:55   #1
DNAx86
Member
 
Iscritto dal: Dec 2007
Città: Friuli
Messaggi: 154
[javascript] oggetti

Sto utilizzando da poco gli oggetti in javascript
E ho notato che dopo aver impostato il valore di una variabile nel costruttore,
i metodi dello stesso oggetto che ho aggiunto al prototipo dello stesso oggetto
non possono accedere a tali valori, risulta undefined.

ES:

function ContexAdmin() {
this.URL = "XXX";
}
ContexAdmin.prototype.handleInsertContex = function(event) {
alert(this.URL);
}


alert stampa a video "undefined" invece che "XXX"


Come mai?
__________________
iPhone4, MacBook

Ultima modifica di DNAx86 : 13-09-2010 alle 17:17.
DNAx86 è offline   Rispondi citando il messaggio o parte di esso
Old 14-09-2010, 07:55   #2
DNAx86
Member
 
Iscritto dal: Dec 2007
Città: Friuli
Messaggi: 154
Qualche idea sul perché I metodi non accedono ai valori ?
Nb: conosco bene la programmazione ad oggetti tradizionale.
__________________
iPhone4, MacBook
DNAx86 è offline   Rispondi citando il messaggio o parte di esso
Old 14-09-2010, 08:02   #3
dojolab
Senior Member
 
L'Avatar di dojolab
 
Iscritto dal: Jun 2010
Città: Varese
Messaggi: 996
Quote:
Originariamente inviato da DNAx86 Guarda i messaggi
Qualche idea sul perché I metodi non accedono ai valori ?
Nb: conosco bene la programmazione ad oggetti tradizionale.
Non amo JS e non considero JS un linguaggio ad Oggetti (nonostante molti lo spacciano come tale :P); ma questa è una opinione strettamente personale.

Le variabili sono tutte LOCALI, ovvero se definite dentro una determinata funzione, hanno valore solo in essa.

Nel tuo esempio URL è stata definita nella funzione ContextAdmin() { e potrà essere usata SOLO li dentro. L'alternativa che puoi fare è far ritornare a ContextAdmin il valore e richiamare la funzione nell'altro"oggetto" JS.
__________________
Il mercatino di dojolab: VENDO UN PO' DI COSE! VAI
Vendo Libro Oracle 10g GUIDA COMPLETA della Oracle Press, ITALIANO: LINK
dojolab è offline   Rispondi citando il messaggio o parte di esso
Old 14-09-2010, 09:57   #4
DNAx86
Member
 
Iscritto dal: Dec 2007
Città: Friuli
Messaggi: 154
Quote:
Originariamente inviato da dojolab Guarda i messaggi
Non amo JS e non considero JS un linguaggio ad Oggetti (nonostante molti lo spacciano come tale :P); ma questa è una opinione strettamente personale.

Le variabili sono tutte LOCALI, ovvero se definite dentro una determinata funzione, hanno valore solo in essa.

Nel tuo esempio URL è stata definita nella funzione ContextAdmin() { e potrà essere usata SOLO li dentro. L'alternativa che puoi fare è far ritornare a ContextAdmin il valore e richiamare la funzione nell'altro"oggetto" JS.
Sapevo già di molte cose strane sul modo in cui js gestisce gli oggetti,
Ma dopo quello che mi hai detto sono rimasto shoccato.

Ad ogni modo, quello che hai detto vale anche nelle variabili impostate nel costruttore?
Perché nel mio esempio ContexAdmin() è il costruttore.

Aggiungo poi che il libro dove ho studiato js mostra esempi simili al mio dove pero il metodo handleInsertContex() riesce magicamente ad accedere ai valori impostati nel costruttore.
È il libro che sbaglia o sono io?
__________________
iPhone4, MacBook
DNAx86 è offline   Rispondi citando il messaggio o parte di esso
Old 14-09-2010, 10:10   #5
shinya
Senior Member
 
L'Avatar di shinya
 
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
Umh... ma come istanzi l'oggetto?

Non sono un ninja in javascript, ma questo a me funziona per esempio (appena provato su chrome):
Codice:
function MyObject() {
  this.x = 42;
}

MyObject.prototype.testFunction = function() {
  alert(this.x);
}

var obj = new MyObject();
obj.testFunction();
shinya è offline   Rispondi citando il messaggio o parte di esso
Old 14-09-2010, 10:26   #6
DNAx86
Member
 
Iscritto dal: Dec 2007
Città: Friuli
Messaggi: 154
Quote:
Originariamente inviato da shinya Guarda i messaggi
Umh... ma come istanzi l'oggetto?

Non sono un ninja in javascript, ma questo a me funziona per esempio (appena provato su chrome):
Codice:
function MyObject() {
  this.x = 42;
}

MyObject.prototype.testFunction = function() {
  alert(this.x);
}

var obj = new MyObject();
obj.testFunction();
Cosi:
Codice:
var contexAdminObj = new ContexAdmin();
var ic = document.getElementById("ic");
ic.addEventListener("click", contexAdminObj.handleInsertContex, true);
inpratica quel metodo dell'oggetto in questione è un handler di un evento.
è sbagliata la logica?

è meglio che creo un oggetto il cui costruttore è l'handler (tipo java) ?

PS: l'alert funziona se chiamo contexAdminObj.handleInsertContex() direttamente, senza assegnarla all'evento
__________________
iPhone4, MacBook

Ultima modifica di DNAx86 : 14-09-2010 alle 10:33.
DNAx86 è offline   Rispondi citando il messaggio o parte di esso
Old 14-09-2010, 10:32   #7
dojolab
Senior Member
 
L'Avatar di dojolab
 
Iscritto dal: Jun 2010
Città: Varese
Messaggi: 996
Quote:
Originariamente inviato da DNAx86 Guarda i messaggi
Sapevo già di molte cose strane sul modo in cui js gestisce gli oggetti,
Ma dopo quello che mi hai detto sono rimasto shoccato.

Ad ogni modo, quello che hai detto vale anche nelle variabili impostate nel costruttore?
Perché nel mio esempio ContexAdmin() è il costruttore.

Aggiungo poi che il libro dove ho studiato js mostra esempi simili al mio dove pero il metodo handleInsertContex() riesce magicamente ad accedere ai valori impostati nel costruttore.
È il libro che sbaglia o sono io?
Perdonami, mi era sfuggito il "this." prima di URL , troppo presto sul Forum :P

Se inizializzi l'oggetto dovrebbe funzionare come ha fatto shinya.

Codice PHP:
handleInsertContex 
Sarebbe? :|
Se è un metodo mancano le () :|

Se è un attributo lascio perdere e ritiro le due righe sopra scritte
__________________
Il mercatino di dojolab: VENDO UN PO' DI COSE! VAI
Vendo Libro Oracle 10g GUIDA COMPLETA della Oracle Press, ITALIANO: LINK
dojolab è offline   Rispondi citando il messaggio o parte di esso
Old 14-09-2010, 10:43   #8
DNAx86
Member
 
Iscritto dal: Dec 2007
Città: Friuli
Messaggi: 154
Se è un metodo mancano le () :|

Se è un attributo lascio perdere e ritiro le due righe sopra scritte [/quote]

Si è un metodo però so che è giusto registrare un handler dentro addeventlistener senza scrivere le parentesi, questo perchè è una assegnamento di una funzione non è la chiamata di una funzione.
La funzione è chiamata quando ci sarà l'evento.

Tutto il problema è sorto nel mixare oggetti con hanler di eventi.
Ora tra i vostri consigli e una rilettura del mio libro ho capito:

cosi funziona:
Codice:
 ic.addEventListener("click", 
function(event){ contexAdminObj.handleInsertContex(event); }, 
true);
Quindi ho risolto
__________________
iPhone4, MacBook
DNAx86 è offline   Rispondi citando il messaggio o parte di esso
Old 14-09-2010, 10:47   #9
dojolab
Senior Member
 
L'Avatar di dojolab
 
Iscritto dal: Jun 2010
Città: Varese
Messaggi: 996
Quote:
Originariamente inviato da DNAx86 Guarda i messaggi
cosi funziona:
Codice:
 ic.addEventListener("click", 
function(event){ contexAdminObj.handleInsertContex(event); }, 
true);
Quindi ho risolto
Mio dio, chi ha inventato questo linguaggio andrebbe preso e fucilato, insieme a Cox :| (IMHO).

Metti risolto nel titolo
__________________
Il mercatino di dojolab: VENDO UN PO' DI COSE! VAI
Vendo Libro Oracle 10g GUIDA COMPLETA della Oracle Press, ITALIANO: LINK
dojolab è offline   Rispondi citando il messaggio o parte di esso
Old 14-09-2010, 10:59   #10
DNAx86
Member
 
Iscritto dal: Dec 2007
Città: Friuli
Messaggi: 154
Quote:
Originariamente inviato da dojolab Guarda i messaggi
Mio dio, chi ha inventato questo linguaggio andrebbe preso e fucilato, insieme a Cox :| (IMHO).

Metti risolto nel titolo
è la prima cosa che ho pensato quando ho letto il capitolo sulle classi e sugli eventi

[OT]: Riguardo al titolo, come si fà la modifica al titolo di un thread in questo forum? Non vedo l'opzione
__________________
iPhone4, MacBook

Ultima modifica di DNAx86 : 14-09-2010 alle 11:03.
DNAx86 è offline   Rispondi citando il messaggio o parte di esso
Old 14-09-2010, 11:08   #11
dojolab
Senior Member
 
L'Avatar di dojolab
 
Iscritto dal: Jun 2010
Città: Varese
Messaggi: 996
Quote:
Originariamente inviato da DNAx86 Guarda i messaggi
è la prima cosa che ho pensato quando ho letto il capitolo sulle classi e sugli eventi

[OT]: Riguardo al titolo, come si fà la modifica al titolo di un thread in questo forum? Non vedo l'opzione
Dopo un pò che è aperto non si può, me lo dimentico sempre (provenendo da altre Community mi scordo questa cosa :|)
__________________
Il mercatino di dojolab: VENDO UN PO' DI COSE! VAI
Vendo Libro Oracle 10g GUIDA COMPLETA della Oracle Press, ITALIANO: LINK
dojolab è offline   Rispondi citando il messaggio o parte di esso
Old 14-09-2010, 14:15   #12
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Il problema l'hai beccato da solo, ovvero dando la funzione all'event listener viene chiamata in un altro contesto, più precisamente il contesto passa dal tuo oggetto a "window". (per contesto intendo lo scope delle variabili, il significato di "this").

Quello che hai effettuato tu si chiama closure, guardatele subito e ti si aprirà un magico mondo.
Senza saper usare le closure non si può dire davvero di usare javascript.


ps. javascript è ad oggetti, ma di tipo prototipale, basato sugli oggetti e non sulle classi.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 14-09-2010, 17:59   #13
dojolab
Senior Member
 
L'Avatar di dojolab
 
Iscritto dal: Jun 2010
Città: Varese
Messaggi: 996
Quote:
Originariamente inviato da MEMon Guarda i messaggi
ps. javascript è ad oggetti, ma di tipo prototipale, basato sugli oggetti e non sulle classi.
Io e JS abbiamo divorziato anni fa
__________________
Il mercatino di dojolab: VENDO UN PO' DI COSE! VAI
Vendo Libro Oracle 10g GUIDA COMPLETA della Oracle Press, ITALIANO: LINK
dojolab è offline   Rispondi citando il messaggio o parte di esso
Old 15-09-2010, 09:58   #14
shinya
Senior Member
 
L'Avatar di shinya
 
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
Quote:
Originariamente inviato da dojolab Guarda i messaggi
Io e JS abbiamo divorziato anni fa
Guarda che non è poi cosi brutto come sembra... se poi usi librerie tipo mootools puoi scrivere codice piuttosto strutturato facilmente.
Prova anche a dare un'occhiata a javascript: The Good Parts di Crockford :P
shinya è offline   Rispondi citando il messaggio o parte di esso
Old 15-09-2010, 10:07   #15
dojolab
Senior Member
 
L'Avatar di dojolab
 
Iscritto dal: Jun 2010
Città: Varese
Messaggi: 996
Quote:
Originariamente inviato da shinya Guarda i messaggi
Guarda che non è poi cosi brutto come sembra... se poi usi librerie tipo mootools puoi scrivere codice piuttosto strutturato facilmente.
Prova anche a dare un'occhiata a javascript: The Good Parts di Crockford :P
Uso JQuery tutti i giorni.
Anni fa usavo mootools.

Questo non ha fatto altro che accelerare il mio divorzio nei confronti di questo linguaggio
__________________
Il mercatino di dojolab: VENDO UN PO' DI COSE! VAI
Vendo Libro Oracle 10g GUIDA COMPLETA della Oracle Press, ITALIANO: LINK
dojolab è offline   Rispondi citando il messaggio o parte di esso
Old 15-09-2010, 10:26   #16
astorcas
Senior Member
 
L'Avatar di astorcas
 
Iscritto dal: Jan 2005
Città: Siena
Messaggi: 1313
Povero javascript.... secondo me il vostro problema è... che è javaSCRIPT...
astorcas è offline   Rispondi citando il messaggio o parte di esso
Old 15-09-2010, 10:42   #17
dojolab
Senior Member
 
L'Avatar di dojolab
 
Iscritto dal: Jun 2010
Città: Varese
Messaggi: 996
Quote:
Originariamente inviato da astorcas Guarda i messaggi
Povero javascript.... secondo me il vostro problema è... che è javaSCRIPT...
O forse JAVAscript?
Sarà il nome? :P
__________________
Il mercatino di dojolab: VENDO UN PO' DI COSE! VAI
Vendo Libro Oracle 10g GUIDA COMPLETA della Oracle Press, ITALIANO: LINK
dojolab è offline   Rispondi citando il messaggio o parte di esso
Old 15-09-2010, 19:11   #18
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da dojolab Guarda i messaggi
Mio dio, chi ha inventato questo linguaggio andrebbe preso e fucilato, insieme a Cox :| (IMHO).

Metti risolto nel titolo
Javascript diventa molto piu' semplice se si smette di pensarlo come un linguaggio ad oggetti, e lo si usa come quello che e' in realta', ovvero un linguaggio funzionale con del malpensato zucchero sintattico per farlo sembrare ad oggetti.
Magicamente spariscono un sacco di comportamenti strani e illogici.
(poi la sintassi ci mette del suo, ma almeno la semantica diventa molto piu' pulita)
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 15-09-2010, 19:15   #19
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Quote:
Originariamente inviato da marco.r Guarda i messaggi
Javascript diventa molto piu' semplice se si smette di pensarlo come un linguaggio ad oggetti, e lo si usa come quello che e' in realta', ovvero un linguaggio funzionale con del malpensato zucchero sintattico per farlo sembrare ad oggetti.
Magicamente spariscono un sacco di comportamenti strani e illogici.
(poi la sintassi ci mette del suo, ma almeno la semantica diventa molto piu' pulita)
Rabbrividisco a quello che hai appena scritto, posso?


Javascript è moooolto malleabile, impone poca roba, ci si fa di tutto e in tutti i modi, è questo forse che spaventa un pò.
E' "plastico" diciamo.

Javascript comunque è fortemente ad oggetti, ma non lo dovete associare ai linguaggi OO che conoscete, non è basato sulle classi, non c'è quindi il concetto di classe, variabili private, incapsulamento, super classe, ereditarietà a classi ecc ecc.
E' di tipo prototipale, quindi totalmente diverso come concezione.

Posso assicurare comunque, che una volta imparato ad usarlo e a "domarlo" lo si ama da quanto è stupendamente "logico".

Ultima modifica di MEMon : 15-09-2010 alle 20:22.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 16-09-2010, 22:24   #20
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da MEMon Guarda i messaggi
E' di tipo prototipale, quindi totalmente diverso come concezione.
Il fatto che sia prototipale non giustifica comportamenti strani come quello segnalato in questo thread. Perche' la chiamata
Codice:
obj.method()
da un risultato diverso da
Codice:
x = obj.method
x();
?
Se uno si accorge gli oggetti (e tutto il resto) non sono altro che hash-table,
che i metodi sono in realta' funzioni, che this e'il top di uno stack aggiornato in alcune condizioni particolari, tutto diventa piu' logico e semplice da capire
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni Redmi Pad 2 9.7: ampio display, economico e peso...
Peugeot Polygon Concept: ecco il futuro delle utilitarie Peugeot Polygon Concept: ecco il futuro delle ut...
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione Reno16 Pro: il compatto di OPPO punta su fotocam...
 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco Hisense 55U7SE: tuttofare e accessibile, il Min...
Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto Kindle Scribe Colorsoft: riduce le cornici e div...
Intel brevetta XBM: la nuova memoria pun...
Film prodotti con l'IA: Disney, insieme ...
Reinstallare Windows senza chiavette o s...
Apple racconta il suo vantaggio nell'AI ...
Cisco Cloud Control, una cabina di regia...
Il software che controlla le Fab va in p...
Il settore tech è il primo bersag...
Windows 11, corretto un bug che poteva o...
X introduce nuove funzioni per i video c...
Blue Origin sta costruendo diversi lande...
DeepSeek avvia lo sviluppo di un chip pr...
Le offerte migliori ora su Amazon sugli ...
Fino a un petabit al secondo! Il piano d...
Cisco punta tutto sull'IA: tutti i 90.00...
Intel Nova Lake riporterà il supp...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 00:25.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v