Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Mate X7 rinnova la sfida nel segmento dei pieghevoli premium puntando su un design ancora più sottile e resistente, unito al ritorno dei processori proprietari della serie Kirin. L'assenza dei servizi Google e del 5G pesa ancora sull'esperienza utente, ma il comparto fotografico e la qualità costruttiva cercano di compensare queste mancanze strutturali con soluzioni ingegneristiche di altissimo livello
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
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-09-2009, 19:27   #1
CercoAiutoo
Member
 
Iscritto dal: Jul 2009
Messaggi: 125
[Javascript] Object literal ?

Qualcuno conosce una guida online per object literal ? Ho trovato questo codice ma non ci capisco niente:

Codice:
var ciao = {
    versione: "0.11"
};
ciao.Base = new Class({
    initialize: function () {
        this.versione = ciao.versione
    },
    RegisterModule: function (a) {
        a.Base = this
    }
});


var boh = new ciao.Base();

Cos'è quel "new Class" ? Istanzia un' oggetto della classe Class ?

Non riesco a trovare niente su internet
CercoAiutoo è offline   Rispondi citando il messaggio o parte di esso
Old 13-09-2009, 19:47   #2
_Claudio
Senior Member
 
L'Avatar di _Claudio
 
Iscritto dal: Aug 2005
Messaggi: 579
Codice:
var ciao = {
    versione: "0.11"
};
ciao.Base = new Class({ /* classe Class, scelta infelice come nome */
    initialize: function () {
        this.versione = ciao.versione
    },
    RegisterModule: function (a) {
        a.Base = this
    }
});

var boh = new ciao.Base(); /* boh ora ha come tipo Class */
Purtroppo js ha una tipizzazione obrobriosa.
_Claudio è offline   Rispondi citando il messaggio o parte di esso
Old 13-09-2009, 19:56   #3
CercoAiutoo
Member
 
Iscritto dal: Jul 2009
Messaggi: 125
Quote:
Originariamente inviato da _Claudio Guarda i messaggi
Codice:
var ciao = {
    versione: "0.11"
};
ciao.Base = new Class({ /* classe Class, scelta infelice come nome */
    initialize: function () {
        this.versione = ciao.versione
    },
    RegisterModule: function (a) {
        a.Base = this
    }
});

var boh = new ciao.Base(); /* boh ora ha come tipo Class */
Purtroppo js ha una tipizzazione obrobriosa.
and so ?

edit: ah non avevo letto i commenti

Ultima modifica di CercoAiutoo : 13-09-2009 alle 20:13.
CercoAiutoo è offline   Rispondi citando il messaggio o parte di esso
Old 13-09-2009, 21:52   #4
CercoAiutoo
Member
 
Iscritto dal: Jul 2009
Messaggi: 125
Ma come fa poi a creare una classe in quel modo ?
Non capisco la sintassi!!
CercoAiutoo è offline   Rispondi citando il messaggio o parte di esso
Old 13-09-2009, 22:46   #5
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Quello è il framework mootools, non centra nulla con la classica sintassi javascript.

Se vuoi creare un oggetto literal devi fare in questo modo:
Codice:
var myObject={
	x:10,
	y:20,
	sum:function(a,b){
		return a+b;
	}
}
In questo modo hai creato UN singolo oggetto che disponde di due proprietà(x e y) e un metodo(sum).
Codice:
var x=myObject.x;  // x è 10
var z=myObject.sum(3,5); // z è 8
Se invece ti interessa creare una classa, e quindi istanziare i tuoi oggetti con new MyClass, allora il discorso è diverso, e leggermente più complesso perchè javascript è di tipo protipale.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 13-09-2009, 22:51   #6
CercoAiutoo
Member
 
Iscritto dal: Jul 2009
Messaggi: 125
Quote:
Originariamente inviato da MEMon Guarda i messaggi
Quello è il framework mootools, non centra nulla con la classica sintassi javascript.

Se vuoi creare un oggetto literal devi fare in questo modo:
Codice:
var myObject={
	x:10,
	y:20,
	sum:function(a,b){
		return a+b;
	}
}
In questo modo hai creato UN singolo oggetto che disponde di due proprietà(x e y) e un metodo(sum).
Codice:
var x=myObject.x;  // x è 10
var z=myObject.sum(3,5); // z è 8
Se invece ti interessa creare una classa, e quindi istanziare i tuoi oggetti con new MyClass, allora il discorso è diverso, e leggermente più complesso perchè javascript è di tipo protipale.
Grazie ho capito tutto
Complesso ? Fa niente... sai dove posso trovare qualche guida o tutorial al riguardo ?

Su internet non si trova quasi niente su object literal eppure è strausato
CercoAiutoo è offline   Rispondi citando il messaggio o parte di esso
Old 13-09-2009, 22:51   #7
_Claudio
Senior Member
 
L'Avatar di _Claudio
 
Iscritto dal: Aug 2005
Messaggi: 579
Mi sembrava anche a me una sintassi strana... ho ragionato per deduzione e sulla struttura del linguaggio...
_Claudio è offline   Rispondi citando il messaggio o parte di esso
Old 13-09-2009, 23:13   #8
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Quote:
Originariamente inviato da CercoAiutoo Guarda i messaggi
Grazie ho capito tutto
Complesso ? Fa niente... sai dove posso trovare qualche guida o tutorial al riguardo ?

Su internet non si trova quasi niente su object literal eppure è strausato
Se cerchi su google javascript literal object trovi moltissima roba.

Complesso nel senso che è un pò diverso da come si ragiona di solito con i linguaggi OO, ti scrivo qualcosa.

Come ti ho detto javascript è prototipale nel senso che ogni classe contiene un "oggetto" chimato prototype il quale contiene tutti i metodi e talvolta anche le proprietà che suddetta classe dovrà avere.
Codice:
function MyClass(s){
	this.name=s;
}
MyClass.prototype.getName=function(){
	return this.name;
}
MyClass.prototype.setName=function(s){
	this.name=s;
}

var c=new MyClass("bla bla");
c.getName(); //  ritorna bla bla
COme vedi hai creato una classe MyClass, al suo prototype hai "dato" due metodi, in questo modo ogni istanza di MyClass possiede questi due metodi.
La particolarità del prototype è che se ora fai una cosa del genere:
Codice:
MyClass.prototype.clearName=function(){
	this.name="";
}

c.clearName(); // questo è possibile, magia della forma prototipale
Tutte le istanze di MyClass avranno a disposizione il nuovo metodo!

Ti starai adesso chiedendo come fare una bella ereditarietà della tua nuova e fiammante classe, ti viene sempre in aiuto il prototype.

Codice:
function Shape(vertices){
	this.vertices=vertices;
	this.color="black";
}
Shape.prototype.setColor=function(c){
	this.color=c;
}


function Square(side){
	Shape.apply(this,4);
	this.side=side;
}
Square.prototype=new Shape;
Square.prototype.constructor=Square;
Square.prototype.calcArea=function(){
	return this.side*this.side;
}

var sq=new Square(10);
sq.setColor("white");  //possibile perchè ha ereditato il metodo
sq.calcArea();  //return 100

sq instanceof Square;  //return true
sq instance of Shape;  //return true, è una eredità a tutti gli effetti!!
In questo modo crei due splendide classi, Shape e Square, la seconda estende la prima aggiungendo nuove carattersistiche(calcArea), il tutto attraverso il prototype.
In particolare come vedi viene assegnato al prototype di Square una istanza di Shape, in questo modo Square ottiene il prototype di Shape.
Ricorda poi di riassegnare il constructor a Square, in quanto dopo l'operazione
Codice:
Square.prototype=new Shape;
anche il constructor di Square diventa quello di Shape, e ciè non va bene.
Il constructor come dice la parola stessa è il costruttore, quello che contiene il codice da eseguire quando si creano nuove istanze con new.

Nel costruttore di Square puoi noatre una cosa strana
Codice:
Shape.apply(this,4);
Questo non fa altro che eseguire il costruttore di Shape nello scope di Square, per farla semplice è come se in Java avresti fatto
Codice:
super(4);   //super riferito a Shape
sperando che tu sia pratico di Java...

Ultima modifica di MEMon : 13-09-2009 alle 23:19.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 14-09-2009, 00:25   #9
CercoAiutoo
Member
 
Iscritto dal: Jul 2009
Messaggi: 125
Bene credo di aver capito
Avevo letto da qualche parte infatti che tramite prototype era possibile diciamo estendere dinamicamente una classe.

L' unica cosa che non ho capito è che MyClass, Shape e Square sono funzioni... perchè le chiami classi ? O forse tu hai indicato solo i costruttori delle classi ?
CercoAiutoo è offline   Rispondi citando il messaggio o parte di esso
Old 14-09-2009, 01:04   #10
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Quote:
Originariamente inviato da CercoAiutoo Guarda i messaggi
Bene credo di aver capito
Avevo letto da qualche parte infatti che tramite prototype era possibile diciamo estendere dinamicamente una classe.

L' unica cosa che non ho capito è che MyClass, Shape e Square sono funzioni... perchè le chiami classi ? O forse tu hai indicato solo i costruttori delle classi ?
Non sono funzioni, sono classi. Ok la differenza è lieve, diciamo che ogni funzione in javascript è una classe.

Codice:
function doSomethng(){
	// some stuff
}
Questa è ovviamente una funzione, ma è anche una classe, in particolare è il costruttore della classe, infatti il codice //some stuff viene eseguito in entrambi i modi:
Codice:
doSomething();  // usata come semplice funzione

var o=new doSomething();  //usata come costruttore di una classe
In javascript la vera e propria classe non esiste, esistono gli oggetti.

Ultima modifica di MEMon : 14-09-2009 alle 01:19.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 14-09-2009, 01:18   #11
CercoAiutoo
Member
 
Iscritto dal: Jul 2009
Messaggi: 125
ah ecco ora è tutto chiaro grazie
CercoAiutoo è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
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...
Nioh 3 debutta alla grande su Steam: pri...
Al centro della Via Lattea ci potrebbe e...
Elon Musk ora guarda alla Luna: SpaceX p...
La Cina ha lanciato nuovamente lo spazio...
Blue Origin potrebbe realizzare il lande...
Artemis II: il prossimo Wet Dress Rehear...
Il nuovo HONOR 600 sta arrivando e avr&a...
La crisi delle memorie non coinvolger&ag...
Windows domina su Steam, ma molti utenti...
Per non incorrere in nuovi aumenti delle...
Cubi Z AI 8M visto da vicino, un mini-PC...
Datacenter nello Spazio, affascinante ma...
Social e minori, Butti apre al dibattito...
Tutte le offerte Amazon del weekend, sol...
Amazon spinge sull'usato garantito: 10% ...
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: 08:49.


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