Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Nioh 3: souls-like punitivo e Action RPG
Nioh 3: souls-like punitivo e Action RPG
Nioh 3 aggiorna la formula Team NINJA con aree esplorabili più grandi, due stili di combattimento intercambiabili al volo (Samurai e Ninja) e un sistema di progressione pieno di attività, basi nemiche e sfide legate al Crogiolo. La recensione entra nel dettaglio su combattimento, build, progressione e requisiti PC
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
La facilità di installazione e la completa automazione di tutte le fasi di utilizzo, rendono questo prodotto l'ideale per molti clienti. Ecco com'è andata la nostra prova in anteprima
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto
be quiet! debutta nel settore mouse da gaming con Dark Perk Ergo e Dark Perk Sym: due modelli gemelli per specifiche, con polling rate di 8.000 Hz anche in wireless, sensore PixArt PAW3950 da 32.000 DPI e autonomia dichiarata fino a 110 ore. Nel test, a 8.000 Hz si arriva a circa 30 ore reali, con ricarica completa in un'ora e mezza
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-09-2010, 17: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 18:17.
DNAx86 è offline   Rispondi citando il messaggio o parte di esso
Old 14-09-2010, 08: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, 09: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, 10: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, 11: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, 11: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 11:33.
DNAx86 è offline   Rispondi citando il messaggio o parte di esso
Old 14-09-2010, 11: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, 11: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, 11: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, 11: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 12:03.
DNAx86 è offline   Rispondi citando il messaggio o parte di esso
Old 14-09-2010, 12: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, 15: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, 18: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, 10: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, 11: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, 11: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, 11: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, 20: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, 20: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 21:22.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 16-09-2010, 23: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


Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti Test in super anteprima di Navimow i220 LiDAR: i...
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto Dark Perk Ergo e Sym provati tra wireless, softw...
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker DJI RS 5: stabilizzazione e tracking intelligent...
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequen...
Logitech G325: audio di fascia alta, wir...
Nessuna pubblicità su Claude, per...
Gli stipendi nel settore tech? Sono anco...
Problemi con la stampa 3D? Un prompt per...
Amazon Leo amplia i contratti con SpaceX...
Basta Purefication, il Giurì bloc...
LibreOffice 26.2 migliora prestazioni e ...
La Cina si prepara a un test della capsu...
La NASA rende note alcune informazioni a...
ASUS ExpertCenter PN54: mini PC Copilot+...
Geely userà una fabbrica europea ...
Leica Camera tratta la cessione della ma...
La nuova AMD non è più 'ec...
La Cina non è più la pecor...
Un SSD accanto alla GPU: la ricetta di Z...
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: 19:26.


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